Skip to content

Instantly share code, notes, and snippets.

Avatar

Yoshinari Takaoka mumumu

View GitHub Profile
@mumumu
mumumu / maintaining-phpdoc-ja-howto.md
Last active Mar 19, 2021
メンテナ向け: PHPマニュアル のメンテナンス方法
View maintaining-phpdoc-ja-howto.md

メンテナ向け: PHPマニュアル のメンテナンス方法

PHPマニュアルのコミット権限を得たら、DocBook を直接編集し、リポジトリにコミットすることが出来ます。
ここでは、その具体的な方法を示します。

PHPマニュアルのコミット権限を得たい方は、こちらをまず読んで下さい

まずはビルドから

まずは PHPマニュアル をビルドする環境を整えなければ始まりません。

@mumumu
mumumu / update_php8_to_versions_xml.php
Last active Jan 31, 2021
add PHP 8 to versions.xml.
View update_php8_to_versions_xml.php
<?php
//
// requirement
//
// - PHP 8
// - nikic/PHP-Parser
//
require_once('vendor/autoload.php');
@mumumu
mumumu / about-phpdoc-ja.md
Last active Jan 8, 2021
PHP マニュアル 日本語版について
View about-phpdoc-ja.md

PHP マニュアル 日本語版について

ここでは、PHPを使うと必ず一度は目にするであろう PHPマニュアル について記していきます。 PHPマニュアルのメンテナンスの前提となる基本知識や、修正方法などについて記していきます。

この文書の著者

mumumu です。PHPマニュアル のメンテナの一人です。

基本知識

@mumumu
mumumu / building-phpdoc-ja-howto.md
Last active Dec 31, 2020
PHPマニュアルのビルド方法
View building-phpdoc-ja-howto.md

PHPマニュアル のビルド方法

PHPのマニュアルは、DocBook と呼ばれるフォーマットで記述されており、PhD という PHPマニュアル のためのツール によってその DocBook から HTML や CHM、PDF などの複数の形式にビルドできる。

この記事では、実際の PHPマニュアル をリポジトリから取ってきてビルドする方法を紹介する。PhD は PDF や manpage形式、epub 等多様な形式がビルドできるが、ここでは HTML および chm のみについて触れる。

a) ビルドするときに使うPHPについて

まず、PHP をインストールしなければはじまらない。
PHP 5.3 以降であれば、HTML 版も chm も問題なくビルドできるはずだ。

@mumumu
mumumu / php_chm_build_environment_memo.md
Last active Oct 13, 2020
メンテナ向け: PHPマニュアル の chm ビルド環境
View php_chm_build_environment_memo.md

メンテナ向け: PHPマニュアル の chm ビルド環境

PHPマニュアル の chm は、ビルドに Windows 環境が必要である。
現在は、クラウドの力を借りて週に一度ビルドから配布までを行っているが、誰でも出来るようにするには少し課題がある。

ビルド環境の詳細

  • Windows が前提
    • 2018/06 現在は、Amazon EC2 上の Windows Server 2016 を使用
    • ビルドした成果物は phpmanualchm という公開バケットへ aws s3 sync し、php.net 側はそれを毎週1回DLして公開する
@mumumu
mumumu / why_you_should_avoid_use_uint8_in_cp.md
Last active Sep 14, 2020
uint8_t とかをカッコつけて競技プログラミングでは使わないほうがいい、という話
View why_you_should_avoid_use_uint8_in_cp.md

uint8_t とかをカッコつけて競技プログラミングでは使わないほうがいい、という話

  • 競技プログラミングでは、std::cin で値を入力するのが一般的である
  • 問題の制約上、小さな値 (例: 0 < N < 100 とか)は、uint8_t で扱えそう、と思ったりする人がいるかもしれないが、ここに罠がある
    • uint8_t な変数に std::cin すると、ビットパターンは char になる。少なくとも gcc (libstdc++) の環境では。
      • 他の処理系だと異なる動きをするかもしれない
    • なので、数値と比較すると思ったように動作しない

サンプルコード (gcc only)

View sqlalchemy_snippet.py
#!/usr/bin/env python
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String
from sqlalchemy.orm import sessionmaker
engine = create_engine('sqlite:///:memory:', echo=True)
Session = sessionmaker(bind=engine)
Base = declarative_base()
View maildropfilter_mistake.md

人にメールを転送しつつ、自分のメールボックスに入れる maildropfilter(1) の設定。


下記では駄目


if (....)
{
View 1334a_editorial.md

https://codeforces.com/contest/1334/problem/A

解説

ゲームの2つの stats - number of play (np) と number of clear (nc) は、以下の条件を すべて 満たさなければならない

  • A) np は単調増加である
  • B) nc は単調増加である
  • C) nc の変化量 は np の変化量以下である
View 1297b_editorial.md

https://codeforces.com/contest/1297/problem/B

区間の重なりを O(C+T) で解く方法として、 いもす法 が知られているが、この問題では T が 10^9 に達するため、いもす法では解くことが出来ない。

この問題で数えるべき「区間の重なりの数が1」の区間は、区間の端っことその前後に属する区間の数を数えることで、O(C^2) で数えることができる。

本番ではいもす法では解けないことを理解していたので、区間を重ねてみて冷静に観察すれば解けた... はずである(´ー`; )

fun oneInRange(arr: ArrayList<Pair<Int, Int>>, pos: Int): Boolean {