diff --git a/.checklinks.yaml b/.checklinks.yaml index dc0fcdf..dc5cc6c 100644 --- a/.checklinks.yaml +++ b/.checklinks.yaml @@ -1,9 +1,28 @@ ignore: exact: - https://kuramitsulab.github.io/paper/rujit.pdf + # CI skips links that reject GitHub Actions requests. + ci: + exact: + - https://digitalcommons.dartmouth.edu/cgi/viewcontent.cgi?article=1071&context=senior_theses + - https://journals.sagepub.com/doi/pdf/10.1016/j.jala.2006.07.013 redirect: exact: - https://journals.sagepub.com/doi/pdf/10.1016/j.jala.2006.07.013 + - https://ynu.repo.nii.ac.jp/record/4714/files/ide_masahiro-thesis.pdf prefixes: - https://dl.acm.org/doi/ - https://link.springer.com/ + # ResearchGate blocks or rate-limits automated requests. + forbidden: + exact: + - https://www.researchgate.net/profile/Aviansh-Nagumanthri/publication/282816987_mruby_-_Rapid_Software_Development_for_Embedded_Systems/links/561f03e308ae50795aff64d0/mruby-Rapid-Software-Development-for-Embedded-Systems.pdf + # ResearchGate blocks unauthenticated access to this publication page. + - https://www.researchgate.net/publication/239436707_How_to_Select_Superinstructions_for_Ruby + # Europe PMC can reject automated requests for these valid PDFs. + - https://europepmc.org/api/fulltextRepo?fileName=1758-2946-5-35.pdf&mimeType=application%2Fpdf&pdfKey=mmXdT8y82ImKZr9J1BKhygSuk43G6DbtnYA3fuicU07POAV1nEw5EtU&pmcId=PMC3733738&pmc_domain=jcheminf&pmc_pageType=pdf&type=FILE&version=1 + - https://europepmc.org/api/fulltextRepo?fileName=btq475.pdf&mimeType=application%2Fpdf&pdfKey=vlfRpUSo2H145j2hPs3O4ccJo5VL0tM0rKe28tG-UgUIkbbk-KSCMUs&pmcId=PMC2951089&pmc_domain=bioinfo&pmc_pageType=pdf&type=FILE&version=1 + # ISO protects its catalogue with an automated-request challenge. + - https://www.iso.org/standard/59579.html + prefixes: + - https://dl.acm.org/doi/ diff --git a/index.md b/index.md index 645fb0a..2e1c701 100644 --- a/index.md +++ b/index.md @@ -37,7 +37,7 @@ PhD thesis, Johannes Kepler University Linz, 2019. # R. Mosaner, D. Leopoldseder, M. Rigger, R. Schatz, H. Mössenböck. -**[Supporting On-Stack Replacement in Unstructured Languages by Loop Reconstruction and Extraction](https://arxiv.org/pdf/1909.08815.pdf)**. +**[Supporting On-Stack Replacement in Unstructured Languages by Loop Reconstruction and Extraction](https://arxiv.org/pdf/1909.08815)**. In Proceedings of the 16th International Conference on Managed Programming Languages and Runtimes (MPLR), 2019. TruffleRuby @@ -49,7 +49,7 @@ In Proceedings of the International Symposium on Memory Management (ISMM), 2019. # K. Sugiyama, K. Sasada, M. J. Dürst. -**[Dynamic Extension of the Ruby Virtual Machine Stack](https://ipsj.ixsq.nii.ac.jp/ej/index.php?active_action=repository_view_main_item_detail&page_id=13&block_id=8&item_id=191427&item_no=1)**. +**[Dynamic Extension of the Ruby Virtual Machine Stack](https://ipsj.ixsq.nii.ac.jp/record/191427/files/IPSJ-TPRO1103004.pdf)**. In the IPSJ Journal of Programming (PRO), 2018. *In Japanese*. MRI @@ -116,7 +116,7 @@ In Proceedings of the 11th Workshop on Implementation, Compilation, Optimization # M. Ide. -**[Study on Method-based and Trace-based Just-in-time Compilation for Scripting Languages](https://ynu.repo.nii.ac.jp/?action=repository_action_common_download&item_id=4714&item_no=1&attribute_id=20&file_no=1)**. +**[Study on Method-based and Trace-based Just-in-time Compilation for Scripting Languages](https://ynu.repo.nii.ac.jp/record/4714/files/ide_masahiro-thesis.pdf)**. PhD thesis, Yokohama National University, 2015. MRI @@ -194,7 +194,7 @@ In Proceedings of the 7th Workshop on Virtual Machines and Intermediate Language # W. Hang Li, D. R. White, J. Singer. -**[JVM-Hosted Languages: They Talk the Talk, but do they Walk the Walk?](http://www.dcs.gla.ac.uk/~jsinger/pdfs/pppj13.pdf)** In Proceedings of the International Conference on Principles and Practices of Programming on the Java Platform (PPPJ), 2013. +**[JVM-Hosted Languages: They Talk the Talk, but do they Walk the Walk?](https://www.dcs.gla.ac.uk/~jsinger/pdfs/pppj13.pdf)** In Proceedings of the International Conference on Principles and Practices of Programming on the Java Platform (PPPJ), 2013. JRuby # @@ -205,20 +205,20 @@ Bachelor's thesis, Hasso-Plattner-Institute, 2013. # J. Castanos, D. Edelsohn, K. Ishizaki, P. Nagpurkar, T. Nakatani, T. Ogasawara, P. Wu. -**[On the Benefits and Pitfalls of Extending a Statically Typed Language JIT Compiler for Dynamic Scripting Languages](https://researcher.watson.ibm.com/researcher/files/us-pengwu/oopsla12-final-dsl.pdf)**. +**[On the Benefits and Pitfalls of Extending a Statically Typed Language JIT Compiler for Dynamic Scripting Languages](https://dl.acm.org/doi/pdf/10.1145/2384616.2384631)**. In Proceedings of the 20th Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA), 2012. JRuby Rubinius # S. Shiba, K. Sasada, K. Hiraki. -**[CastOff: A Compiler for Ruby Implemented as a Library](https://ipsj.ixsq.nii.ac.jp/ej/?action=pages_view_main&active_action=repository_view_main_item_detail&item_id=83510&item_no=1&page_id=13&block_id=8)**. +**[CastOff: A Compiler for Ruby Implemented as a Library](https://ipsj.ixsq.nii.ac.jp/record/83510/files/IPSJ-TPRO0503002.pdf)**. In Journal of Information Processing Society of Japan, Transactions on Programming, 2012. *In Japanese*. MRI # S. Shiba, K. Sasada, S. Urabe, Y. Matsumoto, M. Inaba, K. Hiraki. -**[A Practical AOT Compiler for Ruby](https://ipsj.ixsq.nii.ac.jp/ej/?action=pages_view_main&active_action=repository_view_main_item_detail&item_id=73661&item_no=1&page_id=13&block_id=8)**. +**[A Practical AOT Compiler for Ruby](https://ipsj.ixsq.nii.ac.jp/record/73661/files/IPSJ-TPRO0401007.pdf)**. In Journal of Information Processing Society of Japan, Transactions on Programming, 2011. *In Japanese*. MRI @@ -261,8 +261,9 @@ In Proceedings of the 23rd Conference on Object-Oriented Programming, Systems, L # W. Kelly, J. Gough. -**[Ruby.NET: a Ruby Compiler for the Common Language Infrastructure](http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.294.2678)**. +**[Ruby.NET: a Ruby compiler for the Common Language Infrastructure](https://dl.acm.org/doi/10.5555/1378279.1378288)**. In Proceedings of the 31st Australasian Conference on Computer Science, 2008. +Paywall # K. Sasada, Y. Matsumoto, A. Maeda, M. Namiki. @@ -277,7 +278,7 @@ In Proceedings of the 4th IEEE International Conference on eScience, ESCIENCE, 2 # K. Sasada. -**[YARV: Yet Another RubyVM: Innovating the Ruby Interpreter](https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.482.9851&rep=rep1&type=pdf)**. +**[YARV: Yet Another RubyVM: Innovating the Ruby Interpreter](https://www.atdot.net/yarv/oopsla2005eabstract-rc1.pdf)**. In Proceedings of the 20th Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA), 2005. MRI @@ -302,7 +303,7 @@ In Proceedings of the 2nd International Conference on Electronics and Electrical # B. Daloze, A. Tal, S. Marr, H. Mössenböck, E. Petrank. -**[Parallelization of Dynamic Languages: Synchronizing Built-in Collections](https://ssw.jku.at/General/Staff/Daloze/thread-safe-collections.pdf)**. +**[Parallelization of Dynamic Languages: Synchronizing Built-in Collections](https://eregon.me/blog/assets/research/thread-safe-collections.pdf)**. In Proceedings of the Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA), 2018. TruffleRuby @@ -318,19 +319,19 @@ In Proceedings of the 3rd International Workshop on Libraries, Languages, and Co # B. Daloze, S. Marr, D. Bonetta, H. Mössenböck. -**[Efficient and Thread-Safe Objects for Dynamically-Typed Languages](https://ssw.jku.at/General/Staff/Daloze/thread-safe-objects.pdf)**. +**[Efficient and Thread-Safe Objects for Dynamically-Typed Languages](https://eregon.me/blog/assets/research/thread-safe-objects.pdf)**. In Proceedings of the Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA), 2016. TruffleRuby # J. Alcázar Zapién. -**[Debugging Parallel Programs Using Fork Handlers](https://modprobe.files.wordpress.com/2015/09/jalcazar_pmam20151.pdf)**. +**[Debugging Parallel Programs Using Fork Handlers](https://modprobe.wordpress.com/wp-content/uploads/2015/09/jalcazar_pmam20151.pdf)**. In Proceedings of the Sixth International Workshop on Programming Models and Applications for Multicores and Manycores (PMAM), 2015. MRI # C. Ding, B. Gernhardt, P. Li, M. Hertz. -**[Safe Parallel Programming in an Interpreted Language](http://polaris.cs.uiuc.edu/hpsl/abstracts/a7-ding.pdf)**. +**[Safe Parallel Programming in an Interpreted Language](https://urresearch.rochester.edu/fileDownloadForInstitutionalItem.action?itemId=28626&itemFileId=143942)**. In Proceedings of the First Workshop on the High Performance Scripting Languages, 2015. MRI @@ -342,7 +343,7 @@ In Proceedings of the 35th Conference on Programming Language Design and Impleme # R. Odaira, J. G. Castanos, H. Tomari. -**[Eliminating Global Interpreter Locks in Ruby Through Hardware Transactional Memory](https://researcher.watson.ibm.com/researcher/files/jp-ODAIRA/PPoPP2014_RubyGILHTM.pdf)**. +**[Eliminating Global Interpreter Locks in Ruby Through Hardware Transactional Memory](https://dl.acm.org/doi/pdf/10.1145/2555243.2555247)**. In Proceedings of the 19th Symposium on Principles and Practice of Parallel Programming (PPoPP), 2014. MRI @@ -360,7 +361,7 @@ In Proceedings of the 9th ECOOP Workshop on Reflection, AOP, and Meta-Data for S # H. Nakagawa, K. Sasada. -**[Design and Implementation of Efficient Interprocess Transfer and Sharing Mechanism for Ruby Objects](https://ipsj.ixsq.nii.ac.jp/ej/index.php?action=pages_view_main&active_action=repository_action_common_download&item_id=83710&item_no=1&attribute_id=1&file_no=1&page_id=13&block_id=8)**. +**[Design and Implementation of Efficient Interprocess Transfer and Sharing Mechanism for Ruby Objects](https://ipsj.ixsq.nii.ac.jp/record/83710/files/IPSJ-TPRO0504002.pdf)**. In the IPSJ Journal of Programming (PRO), 2012. *In Japanese*. MRI @@ -398,7 +399,7 @@ In Proceedings of the Conference on Object-Oriented Programming, Systems, Langua # S. N. Guria, J. S. Foster, D. Van Horn. -**[RbSyn: Type- and Effect-Guided Program Synthesis](https://arxiv.org/pdf/2102.13183.pdf)**. +**[RbSyn: Type- and Effect-Guided Program Synthesis](https://arxiv.org/pdf/2102.13183)**. In Proceedings of the 42nd ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI), 2021. # @@ -408,12 +409,12 @@ In Proceedings of the 16th Symposium on Dynamic Languages (DLS), 2020. # M. Kazerounian, S. N. Guria, N. Vazou, J. S. Foster, D. Van Horn. -**[Type-level Computations for Ruby Libraries](https://arxiv.org/pdf/1904.03521.pdf)**. +**[Type-level Computations for Ruby Libraries](https://arxiv.org/pdf/1904.03521)**. In Proceedings of the 40th ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI), 2019. # M. Kazerounian, N. Vazou, A. Bourgerie, J. S. Foster, E. Torlak. -**[Refinement Types for Ruby](https://arxiv.org/pdf/1711.09281.pdf)**. +**[Refinement Types for Ruby](https://arxiv.org/pdf/1711.09281)**. In Proceedings of the 19th International Conference on Verification, Model Checking, and Abstract Interpretation (VMCAI), 2018. # @@ -477,7 +478,7 @@ In Proceedings of the 44th ACM SIGPLAN Conference on Programming Language Design # B. Powers, D. Tench, E. D. Berger, A. McGregor. -**[Mesh: Compacting Memory Management for C/C++ Applications](https://arxiv.org/pdf/1902.04738.pdf)**. +**[Mesh: Compacting Memory Management for C/C++ Applications](https://arxiv.org/pdf/1902.04738)**. In Proceedings of the 40th ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI), 2019. ### Tooling @@ -491,13 +492,13 @@ In Proceedings of the 15th International Conference on Managed Languages and Run # J. Kreindl, M. Rigger, H. Mössenböck. -**[Debugging Native Extensions of Dynamic Languages](https://arxiv.org/pdf/1808.00823.pdf)**. +**[Debugging Native Extensions of Dynamic Languages](https://arxiv.org/pdf/1808.00823)**. In Proceedings of 15th International Conference on Managed Languages & Runtimes (ManLang), 2018. TruffleRuby # M. Van De Vanter, C. Seaton, M. Haupt, C. Humer, T. Würthinger. -**[Fast, Flexible, Polyglot Instrumentation Support for Debuggers and other Tools](https://arxiv.org/pdf/1803.10201v1.pdf)**. +**[Fast, Flexible, Polyglot Instrumentation Support for Debuggers and other Tools](https://arxiv.org/pdf/1803.10201v1)**. In The Art, Science, and Engineering of Programming, Vol. 2, No. 3, 2018. TruffleRuby @@ -516,8 +517,8 @@ In Proceedings of the Principles and Practices of Programming on the Java Platfo # C. Seaton, M. L. Van De Vanter, M. Haupt. -**[Debugging at Full Speed](https://www.cristal.univ-lille.fr/dyla14/papers/dyla14-3-Debugging_at_Full_Speed.pdf))**. -In Proceedings of the 8th Workshop on Dynamic Languages and Applications (DYLA), 2014. ([source code](https://web.archive.org/web/20150117042919/https://lafo.ssw.uni-linz.ac.at/truffle/debugging/dyla14-debugging-artifact-0557a4f756d4.tar.gz)) +**[Debugging at Full Speed](https://www.cristal.univ-lille.fr/dyla14/papers/dyla14-3-Debugging_at_Full_Speed.pdf)**. +In Proceedings of the 8th Workshop on Dynamic Languages and Applications (DYLA), 2014. TruffleRuby # @@ -562,7 +563,7 @@ In Proceedings of the 10th Symposium on Dynamic Languages (DLS), 2014. # T. F. J.-M. Pasquier, J. Bacon, B. Shand. -**[FlowR: Aspect Oriented Programming for Information Flow Control in Ruby](https://scholar.harvard.edu/files/tfjmp/files/2014modularity.pdf)**. +**[FlowR: Aspect Oriented Programming for Information Flow Control in Ruby](https://www.cl.cam.ac.uk/research/srg/opera/publications/papers/2014FlowR.pdf)**. In Proceedings of the 13th International Conference on Modularity (MODULARITY), 2014. # @@ -582,7 +583,7 @@ In Proceedings of the 5th International Conference on Software Language Engineer # S. Mairhofer, R. Feldt, R. Torkar, S. Poulding. -**[Search-Based Software Testing and Test Data Generation for a Dynamic Programming Language](https://arxiv.org/pdf/1804.09232.pdf)**. +**[Search-Based Software Testing and Test Data Generation for a Dynamic Programming Language](https://arxiv.org/pdf/1804.09232)**. In Proceedings of the 13th Annual Conference on Genetic and Evolutionary Computation, 2011. # @@ -613,7 +614,7 @@ In Proceedings of the 1st International Workshop on Feature-Oriented Software De # A. Oritz. -**[Language Design and Implementation Using Ruby and the Interpreter Pattern](http://34.212.143.74/publicaciones/sif.pdf)**. +**[Language Design and Implementation Using Ruby and the Interpreter Pattern](https://arielortiz.info/publicaciones/sif.pdf)**. In Proceedings of the 39th SIGCSE Technical Symposium on Computer Science Education, 2008. # @@ -656,12 +657,12 @@ PhD thesis, 2012. # R. Smith, R. Williamson, D. Ventura, J. T. Prince. -**[Rubabel: wrapping open Babel with Ruby](https://jcheminf.biomedcentral.com/track/pdf/10.1186/1758-2946-5-35.pdf)**. +**[Rubabel: wrapping open Babel with Ruby](https://europepmc.org/api/fulltextRepo?fileName=1758-2946-5-35.pdf&mimeType=application%2Fpdf&pdfKey=mmXdT8y82ImKZr9J1BKhygSuk43G6DbtnYA3fuicU07POAV1nEw5EtU&pmcId=PMC3733738&pmc_domain=jcheminf&pmc_pageType=pdf&type=FILE&version=1)**. Journal of Cheminformatics, 5(1), 35, 2013. # N. Goto, P. Prins, M. Nakao, R. Bonnal, J. Aerts, T. Katayama. -**[Bioruby: bioinformatics software for the Ruby programming language](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC2951089/pdf/btq475.pdf)**. +**[Bioruby: bioinformatics software for the Ruby programming language](https://europepmc.org/api/fulltextRepo?fileName=btq475.pdf&mimeType=application%2Fpdf&pdfKey=vlfRpUSo2H145j2hPs3O4ccJo5VL0tM0rKe28tG-UgUIkbbk-KSCMUs&pmcId=PMC2951089&pmc_domain=bioinfo&pmc_pageType=pdf&type=FILE&version=1)**. Bioinformatics, 26(20):2617–9, Oct 2010. ### Robotics diff --git a/script/checklinks b/script/checklinks index 4c62815..c6ab705 100755 --- a/script/checklinks +++ b/script/checklinks @@ -235,7 +235,9 @@ def parse_arguments(arguments) end def config_matches?(config, path, url) - Array(config.dig("ignore", *path)).any? { |candidate| yield candidate, url } + candidates = Array(config.dig("ignore", *path)) + candidates += Array(config.dig("ignore", "ci", *path)) if ENV["CI"] == "true" + candidates.any? { |candidate| yield candidate, url } end config, files = parse_arguments(ARGV) @@ -284,12 +286,12 @@ url_worklist.process_concurrently(16) do |url| if code == 200 status_worklist.push([:ok]) - elsif (301..302).include?(code) && + elsif (301..303).include?(code) && (config_matches?(config, ["redirect", "exact"], url) { |candidate, value| value.start_with?(candidate) } || config_matches?(config, ["redirect", "prefixes"], url) { |candidate, value| value.start_with?(candidate) } || config_matches?(config, ["redirect", "suffixes"], url) { |candidate, value| value.end_with?(candidate) }) status_worklist.push([:ignored]) - elsif code == 403 && + elsif [403, 429].include?(code) && (config_matches?(config, ["forbidden", "exact"], url) { |candidate, value| value.start_with?(candidate) } || config_matches?(config, ["forbidden", "prefixes"], url) { |candidate, value| value.start_with?(candidate) } || config_matches?(config, ["forbidden", "suffixes"], url) { |candidate, value| value.end_with?(candidate) }) @@ -348,7 +350,7 @@ else puts " #{filename}: #{error}" when :url url, code, headers = args - message = if (301..302).include?(code) + message = if (301..303).include?(code) "#{code} -> #{headers["location"]}" else code