(* TODO: MAP PAGES THAT HAVE NO EQUIVALENT IN NEW SITE: * * *) (* (OLD URL, NEW URL) *) let old_to_new = (* NO EQUIVALENT *) [ ("/fr/recrutement-ocamlpro/", "/internships") ; ("/fr/recrutement-ocamlpro/", "/jobs") ; ( "https://www.ocamlpro.com/pre-inscription-a-une-session-de-formation-inter-entreprises/" , "/" ) ; ( "https://www.ocamlpro.com/2018/07/20/ocamlpros-tezos-block-explorer-tzscans-last-updates/" , "/" ) ; ( "https://www.ocamlpro.com/2018/10/17/ocamlpros-tzscan-grant-proposal-accepted-by-the-tezos-foundation-joint-press-release/" , "/" ) ; ( "https://www.ocamlpro.com/2018/11/06/liquidity-tutorial-a-game-with-an-oracle-for-random-numbers/" , "/" ) ; ( "https://www.ocamlpro.com/2019/03/05/signing-data-for-smart-contracts/" , "/" ) ; ( "https://www.ocamlpro.com/2019/03/08/announcing-liquidity-version-1-0/" , "/" ) ; ( "https://www.ocamlpro.com/2019/03/09/release-liquidity-v1-smart-contracts-language/" , "/" ) ; ( "https://www.ocamlpro.com/2019/08/30/ocamlpros-compiler-team-work-update/" , "/" ) ; ( "https://www.ocamlpro.com/2019/09/25/ocaml-expert-and-beginner-training-by-ocamlpro-in-french-nov-5-6-7-8/" , "/" ) ; ( "https://www.ocamlpro.com/2020/03/16/new-version-of-try-ocaml-in-beta/" , "/" ) ; ( "https://www.ocamlpro.com/2020/06/05/interview-sylvain-conchon-joins-ocamlpro/" , "/" ) ; ( "https://www.ocamlpro.com/2020/12/01/memthol-exploring-program-profiling/" , "/" ) ; ("https://www.ocamlpro.com/2021/01/22/release-of-alt-ergo-2-4-0/", "/") ; ("https://www.ocamlpro.com/2021/03/29/new-try-alt-ergo/", "/") ] (* LEAD TO 404 *) @ [ ("https://www.ocamlpro.com/2017/05/04/opam-build", "404") ; ("https://www.ocamlpro.com/2018/07/26/opam-2-0-0-rc3", "404") ] (* PAGES STATIQUES FR *) @ [ ("/fr/accueil/", "/index") ; ("/fr/accueil/#equipe/", "/team") ; ("/fr/lequipe-ocamlpro", "/team") ; ("/fr/lequipe-ocamlpro/", "/team") ; ("/fr/accueil/#expertise/", "/index") ; ("/fr/accueil/formations/", "/index") ; ( "/fr/formation-maitriser-opam-et-les-outils-ocaml" , "/course_mastering_opam_ocaml_tools" ) ; ( "/fr/formation-maitriser-opam-et-les-outils-ocaml/" , "/course_mastering_opam_ocaml_tools" ) ; ("/fr/mentions-legales", "/legal-notice") ; ("/fr/accueil/#prototypage", "/startup_studio") ; ("/fr/formation-expert-ocaml/", "/course_ocaml_expert") ; ("/fr/formation-rust/", "/course_rust_vocational_training") ; ("/fr/recherche-developpement/", "/research-and-development") ; ("/fr/formation-passer-a-ocaml", "/course_ocaml_development") ; ("/fr/formation-passer-a-ocaml/", "/course_ocaml_development") ; ("/fr/formation-optimiser-du-code-ocaml/", "/course_ocaml_code_opti") ] (* STATIC PAGES *) @ [ ("/", "/index") ; ("/team", "/team") ; ("/#team", "/team") ; ("/#expertise", "/index") ; ("/training-ocamlpro/", "/index") ; ("/legal-notice", "/legal-notice") ; ("/#prototyping", "/startup_studio") ; ("/mentions-legales", "/legal-notice") ; ("/research-and-development/", "/research-and-development") ; ("/rust-vocational-training-2/", "/course_rust_vocational_training") ] (* COURSE PAGES *) @ [ ( "/course-mastering-opam-ocamls-tooling/" , "/course_mastering_opam_ocaml_tools" ) ; ("/course-ocaml-expert/", "/course_ocaml_expert") ; ("/course-ocaml-development/", "/course_ocaml_development") ; ("/course-ocaml-code-optimization/", "/course_ocaml_code_opti") ; ("/rust-vocational-training-2/", "/course_rust_vocational_training") ] (* AUTHORS *) @ [ ("/fr/author/lefessan/", "/blog/authors/fabrice_le_fessant") ; ("/fr/author/acoquer/", "/blog/authors/albin_coquereau") ; ("/fr/author/adrien/", "/blog/authors/adrien_champion") ; ("/fr/author/aurore/", "/blog/authors/aurore_dromby") ; ("/fr/author/cagdas/", "/blog/authors/cagdas_bozman") ; ("/fr/author/louis/", "/blog/authors/louis_gesbert") ; ("/fr/author/thomas/", "/blog/authors/thomas_blanc") ; ("/fr/author/ocamlpro/", "/blog/authors/ocamlpro") ; ("/fr/author/raja/", "/blog/authors/raja_boujbel") ; ("/fr/author/leob/", "/blog/authors/leo_boitel") ; ("/fr/author/muriel/", "/blog/authors/muriel") ; ("/fr/author/vincent/", "?") ; ("/fr/author/alain/", "?") ] (* BLOG *) @ [ ("/blog/", "/blog") ; ("/fr/blog-fr/", "/blog") ; ( "/2011/05/06/ocaml-32bits-longval/" , "/blog/2011_05_06_ocaml_32bits_longval" ) ; ("/2011/06/03/ocaml-cheat-sheets/", "/blog/2011_06_03_ocaml_cheat_sheets") ; ("/2011/06/23/ocaml-and-windows/", "/blog/2011_06_23_ocaml_and_windows") ; ( "/2011/08/10/packing-and-functors/" , "/blog/2011_08_10_packing_and_functors" ) ; ( "/2012/08/08/profiling-ocaml-amd64-code-under-linux/" , "/blog/2012_08_08_profiling_ocaml_amd64_code_under_linux" ) ; ( "/2012/08/20/ocamlpros-contributions-to-ocaml-4-00-0/" , "/blog/2012_08_20_ocamlpro_contributions_to_400" ) ; ( "/2013/01/17/beta-release-of-opam/" , "/blog/2013_01_17_beta_release_of_opam" ) ; ( "/2013/02/18/an-overview-of-our-current-activities/" , "/blog/2013_02_18_overview_of_current_activities" ) ; ( "/2013/03/14/opam-1-0-0-released/" , "/blog/2013_03_15_opam_1.0.0_released" ) ; ( "/2013/03/18/an-indentation-engine-for-ocaml/" , "/blog/2013_03_18_an_indentation_engine_for_ocaml" ) ; ( "/2013/04/02/wxocaml-camlidl-and-class-modules/" , "/blog/2013_04_02_wxocaml_camlidl_and_class_modules" ) ; ( "/2013/04/22/april-monthly-report/" , "/blog/2013_04_22_april_monthly_report" ) ; ( "/2013/05/24/optimisations-you-shouldnt-do/" , "/blog/2013_05_24_optimisations_you_shouldnt_do" ) ; ( "/2013/07/01/news-from-may-and-june/" , "/blog/2013_07_01_news_from_may_and_june" ) ; ( "/2013/07/11/better-inlining-progress-report/" , "/blog/2013_07_11_better_inlining_progress_report" ) ; ("/2013/08/05/news-from-july/", "/blog/2013_08_05_news_from_july") ; ( "/2013/09/04/ocamlpro-highlights-august-2013/" , "/blog/2013_09_04_ocamlpro_highlights_august_2013" ) ; ( "/2013/10/02/alt-ergo-ocamlpro-two-months-later/" , "/blog/2013_10_02_alt_ergo_ocamlpro_two_months_later" ) ; ( "2013/11/01/ocamlpro-highlights-sept-oct-2013/\n" , "/blog/2013_11_01_ocamlpro_highlights_sept_oct_2013" ) ; ( "/2013/12/02/ocamlpro-highlights-november-2013/" , "/blog/2013_12_02_ocamlpro_highlights_november_2013" ) ; ( "/2014/02/05/ocamlpro-highlights-dec-2013-jan-2014/" , "/blog/2014_02_05_ocamlpro_highlights_dec_2013_jan_2014" ) ; ( "/2014/03/05/ocamlpro-highlights-feb-2014/" , "/blog/2014_03_05_ocamlpro_highlights_feb_2014" ) ; ( "/2014/04/01/the-generic-syntax-extension/" , "/blog/2014_04_01_the_generic_syntax_extension" ) ; ( "/2015/01/29/private-release-of-alt-ergo-1-00/" , "/blog/2015_01_29_private_release_of_alt_ergo_1_00" ) ; ( "/2015/03/04/cumulus-and-ocp-memprof-a-love-story/" , "/blog/2015_03_04_cumulus_and_ocp_memprof_a_love_story" ) ; ( "/2015/04/13/yes-ocp-memprof-scanf/" , "/blog/2015_04_13_yes_ocp_memprof_scanf" ) ; ( "/2015/05/07/opam-1-2-2-released/" , "/blog/2015_05_07_opam_1.2.2_released" ) ; ( "/2014/05/20/ocamlpro-highlights-april-2014/" , "/blog/2014_05_20_ocamlpro_highlights_april_2014" ) ; ( "/2014/07/15/try-alt-ergo-in-your-browser/" , "/blog/2014_07_15_try_alt_ergo_in_your_browser" ) ; ( "/2014/07/16/ocamlpro-highlights-may-june-2014/" , "/blog/2014_07_16_ocamlpro_highlights_may_june_2014" ) ; ( "/2015/05/18/reduced-memory-allocations-with-ocp-memprof/" , "/blog/2015_05_18_reduced_memory_allocations_with_ocp_memprof." ) ; ("/2016/04/01/asm-ocaml/", "/blog/2016_04_01_asm_ocaml") ; ( "/2016/11/21/release-of-alt-ergo-1-30-with-experimental-support-for-models-generation/" , "/blog/2016_11_21_release_of_alt_ergo_1_30_with_experimental_support_for_models_generation" ) ; ( "/2017/02/09/opam-2-0-beta-is-out/" , "/blog/2017_02_09_opam_2.0_beta_is_out" ) ; ( "/2017/03/16/new-opam-features-opam-build/" , "/blog/2017_03_16_new_opam_features_opam_build" ) ; ("/2017/04/11/ezsudoku/", "/blog/2017_04_01_ezsudoku") ; ( "/2017/04/27/new-opam-features-local-switches/" , "/blog/2017_04_27_new_opam_features_local_switches" ) ; ( "/2017/05/04/new-opam-features-opam-install-dir/" , "/blog/2017_05_04_new_opam_features_opam_install_dir" ) ; ( "/2017/05/11/new-opam-features-more-expressive-dependencies/" , "/blog/2017_05_11_new_opam_features_more_expressive_dependencies" ) ; ("/2018/01/15/2017-at-ocamlpro/", "/blog/2018_01_15_2017_at_ocamlpro") ; ("/2018/01/15/2017-at-ocamlpro-2/", "/blog/2018_01_15_2017_at_ocamlpro") ; ( "/2018/02/14/release-of-a-first-version-of-tzscan-io-a-tezos-block-explorer/" , "/blog/2018_02_14_release_of_a_first_version_of_tzscan_io_a_tezos_block_explorer" ) ; ( "/2018/02/08/liquidity-smart-contract-deploy-live-demo-on-tezos-alphanet-jfla2018/" , "/blog/2018_02_08_liquidity_smart_contract_deploy_live_demo_on_tezos_alphanet_jfla2018" ) ; ( "/2018/02/08/ocamlpros-liquidity-lang-demo-at-jfla2018-a-smart-contract-design-language/" , "/blog/2018_02_08_liquidity_smart_contract_deploy_live_demo_on_tezos_alphanet_jfla2018" ) ; ( "/2018/03/14/new-updates-on-tzscan/" , "/blog/2018_03_14_new_updates_on_tzscan" ) ; ( "/2018/03/14/release-of-alt-ergo-2-1-0/" , "/blog/2018_03_14_release_of_alt_ergo_2_1_0" ) ; ("/2018/04/01/ocaml-jtrt/", "/blog/2018_04_01_ocaml_jtrt") ; ( "/2018/04/13/taskforce-on-the-tezos-protocol-and-tzscan-evolution/" , "/blog/2018_04_13_taskforce_on_the_tezos_protocol_and_tzscan_evolution" ) ; ( "/2018/04/23/release-of-alt-ergo-2-2-0/" , "/blog/2018_04_23_release_of_alt_ergo_2_2_0" ) ; ( "/2018/05/22/opam-2-0-0-release-candidate-2-is-out/" , "/blog/2018_05_22_opam_2.0.0_release_candidate_2_is_out" ) ; ( "/2018/07/20/new-updates-on-tzscan-2/" , "/blog/2018_07_20_new_updates_on_tzscan_2" ) ; ( "/2018/07/26/opam-2-0-0-rc4-final-is-out/" , "/blog/2018_07_26_opam_2.0.0_rc4_final_is_out" ) ; ( "/2018/09/19/opam-2-0-0-release-and-repository-upgrade/" , "/blog/2018_09_19_opam_2.0.0_release_and_repository_upgrade" ) ; ( "/2018/11/08/first-open-source-release-of-tzscan/" , "/blog/2018_11_08_first_open_source_release_of_tzscan" ) ; ( "/2018/11/15/an-introduction-to-tezos-rpcs-a-basic-wallet/" , "/blog/2018_11_15_an-introduction_to_tezos_rpcs_a_basic_wallet" ) ; ( "/2018/11/21/an-introduction-to-tezos-rpcs-signing-operations/" , "/blog/2018_11_21_an_introduction_to_tezos_rpcs_signing_operations" ) ; ("/2018/12/14/opam-2-0-2-release/", "/blog/2018_12_12_opam_2.0.2_release") ; ( "/2019/01/15/improving-tezos-storage/" , "/blog/2019_01_15_improving_tezos_storage" ) ; ("/2019/01/29/tezos-and-ocamlpro/", "/blog/2019_01_29_tezos_and_ocamlpro") ; ( "/2019/01/30/improving-tezos-storage-update-and-beta-testing/" , "/blog/2019_01_30_improving_tezos_storage_update_and_beta_testing" ) ; ( "/2019/02/04/improving-tezos-storage-gitlab-branch-for-testers/" , "/blog/2019_02_04_improving_tezos_storage_gitlab_branch_for_testers" ) ; ( "/2019/02/11/whats-new-for-alt-ergo-in-2018-here-is-a-recap/" , "/blog/2019_02_11_whats_new_for_alt_ergo_in_2018_here_is_a_recap" ) ; ( "/2019/03/05/techelson-a-test-execution-engine-for-michelson/" , "/blog/2019_03_05_techelson_a_test_execution_engine_for_michelson" ) ; ("/2019/04/10/opam-2-0-4-release/", "/blog/2019_04_10_opam_2.0.4_release") ; ( "/2019/04/29/blockchains-at-ocamlpro-an-overview/" , "/blog/2019_04_29_blockchains_at_ocamlpro_an_overview" ) ; ( "/2019/07/09/alt-ergo-participation-to-the-smt-comp-2019/" , "/blog/2019_07_09_alt_ergo_participation_to_the_smt_comp_2019" ) ; ("/2019/07/11/opam-2-0-5-release/", "/blog/2019_07_11_opam_2.0.5_release") ; ( "/2019/09/13/updated-cheat-sheets-ocaml-language-and-ocaml-standard-library/" , "/blog/2019_09_13_updated_cheat_sheets_language_stdlib_2" ) ; ( "/2019/09/20/a-look-back-on-ocaml/" , "/blog/2019_09_20_look_back_ocaml_since_2011" ) ; ( "/2020/01/10/opam-2-0-cheatsheet/" , "/blog/2020_01_10_opam_2.0_cheat_sheet" ) ; ("/2020/01/16/opam-2-0-6-release/", "/blog/2020_01_16_opam_2.0.6_release") ; ("/2020/02/04/2019-at-ocamlpro/", "/blog/2020_02_04_2019_at_ocamlpro") ; ( "/2020/03/03/alt-ergo-userss-club-annual-meeting/" , "/blog/2020_03_03_reunion_annuelle_du_club_des_utilisateurs_dalt_ergo" ) ; ( "/2020/03/23/ocaml-new-best-fit-garbage-collector/" , "/blog/2020_03_23_in_depth_look_at_best_fit_gc" ) ; ("/2020/04/21/opam-2-0-7-release/", "/blog/2020_04_21_opam_2.0.7_release") ; ( "/2020/04/21/opam-2-1-0-alpha-is-here/" , "/blog/2020_04_21_opam_2.1.0_alpha_is_here" ) ; ( "/2020/05/19/ocaml-solidity-parser-with-menhir/" , "/blog/2020_05_19_ocaml_solidity_parser_with_menhir" ) ; ("/fr/2020/06/01/tutoriel-format/", "/2020_06_01_tutoriel_format") ; ( "/2020/06/09/a-dune-love-story-from-liquidity-to-love/" , "/blog/2020_06_09_a_dune_love_story_from_liquidity_to_love" ) ; ( "/2020/09/24/rehabilitating-packs-using-functors-and-recursivity-part-1/" , "/blog/2020_09_24_rehabilitating_packs_using_functors_and_recursivity_part_1" ) ; ( "/2020/09/30/rehabilitating-packs-using-functors-and-recursivity-part-2/" , "/blog/2020_09_30_rehabilitating_packs_using_functors_and_recursivity_part_2" ) ; ("/2021/02/02/2020-at-ocamlpro/", "/blog/2021_02_02_2020_at_ocamlpro") ; ("/2021/02/09/opam-2-0-8-release/", "/blog/2021_02_08_opam_2.0.8_release") ; ( "/2021/04/29/alt-ergo-users-club-annual-meeting-2021/" , "/blog/2021_04_29_reunion_annuelle_du_club_des_utilisateurs_dalt_ergo_2021" ) ; ( "/2021/05/06/tutorial-format-module-of-ocaml/" , "/2021_05_06_tutorial_format_module_of_ocaml" ) ; ( "/2021/07/16/detecting-identity-functions-in-flambda/" , "/blog/2021_07_16_detecting_identity_functions_in_flambda" ) ; ("/2021/08/05/opam-2-0-9-release/", "/blog/2021_08_03_opam_2.0.9_release") ; ( "/2021/08/05/opam-2-1-0-is-released/" , "/blog/2021_08_04_opam_2.1.0_is_released" ) ; ( "/2021/09/02/generating-static-and-portable-executables-with-ocaml/" , "/blog/2021_09_02_generating_static_and_portable_executables_with_ocaml" ) ; ("/", "/") ; ("/", "/") ; ("/", "/") ; ("/", "/") ; ("/", "/") ]