2015年12月9日水曜日

GAEp クックパッド (2018/2/23)

いま流行の Flask で。
Windows で Flask を使うおまじない。appengine_config.py
# coding: utf-8

# https://issuetracker.google.com/issues/72043776#comment7
import os
import sys
on_appengine = os.environ.get('SERVER_SOFTWARE','').startswith('Development')

if on_appengine and os.name == 'nt':
  sys.platform = "Not Windows"

from google.appengine.ext import vendor

# Add any libraries installed in the "lib" folder.
vendor.add('lib') 

エラー発生時に、コンソール画面へスタックトレースを表示したい
# https://stackoverflow.com/a/46914462
app = Flask(__name__)

import os
production_environment = os.getenv('SERVER_SOFTWARE').startswith('Google App Engine/')

if not production_environment:
  app.debug = True 
空のレスポンス
    # https://stackoverflow.com/a/24295616
    return ('', 201)

Key のパースエラーを包み隠す
  try:
    key = ndb.Key(urlsafe = request.args.get('k'))
  except Exception, e:
    # https://github.com/googlecloudplatform/datastore-ndb-python/issues/143#issuecomment-110869342
    if e.__class__.__name__ == 'ProtocolBufferDecodeError':
      return ('', 404)
    raise

Content-Type を設定
  resp = Response("\n".join(lines))
  resp.headers["content-type"] = 'text/plain'
  return resp

Jinja2 で三項演算子。loop.first ? 'true' : 'false'参考
{{ 'true' if loop.first else 'false' }}
?? 演算子も。
{{ value or 'fallback' }}

JSON を返す。参考
from flask import jsonify

return jsonify(root)
自分の URL 参考
from flask import request

request.base_url

a
a
a

2015年12月4日金曜日

Cygwin gcj 4.9.3 で NoClassDefFoundError GCCMain エラー

gcj エラー出力

/usr/bin/gcj -O2 --encoding=UTF-8 --classpath="/usr/share/java/libgcj-4.9.3.jar:/home/ku_000/pdftk-2.02-dist/java:." -C pdftk/com/lowagie/text/ElementTags.java
Exception in thread "main" java.lang.NoClassDefFoundError: org.eclipse.jdt.internal.compiler.batch.GCCMain
   at gnu.java.lang.MainThread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: org.eclipse.jdt.internal.compiler.batch.GCCMain not found in gnu.gcj.runtime.SystemClassLoader{urls=[], parent=gnu.gcj.runtime.ExtensionClassLoader{urls=[], parent=null}}
   at java.net.URLClassLoader.findClass(Unknown Source)
   at java.lang.ClassLoader.loadClass(Unknown Source)
   at java.lang.ClassLoader.loadClass(Unknown Source)
   at gnu.java.lang.MainThread.run(Unknown Source)
Makefile:44: recipe for target 'pdftk/com/lowagie/text/ElementTags.class' failed
make[1]: [pdftk/com/lowagie/text/ElementTags.class] Error 1 (ignored)

こういう事らしいです…

Specifically, it says to download

  ftp://sourceware.org/pub/java/ecj-latest.jar

and rename the file to

  /usr/share/java/ecj.jar.

https://cygwin.com/ml/cygwin/2012-04/msg00103.html

2015年10月30日金曜日

HKCU\Software\Microsoft\Internet Explorer\LowRegistry\IEShims\NormalizedPaths

Internet Explorer に関する整合性レベル低についての情報を探していました。


どうもこのレジストリが当たりのようです。

どのような整合性レベルが設定されているのか、検証:

C:\Users\ku_000\AppData\Local\Microsoft\Windows\Temporary Internet Files\Low>icacls .
. NT AUTHORITY\SYSTEM:(I)(OI)(CI)(F)
  BUILTIN\Administrators:(I)(OI)(CI)(F)
  DD36\ku_000:(I)(OI)(CI)(F)
  Mandatory Label\Low Mandatory Level:(OI)(CI)(NW)

C:\Users\ku_000\AppData\Local\Microsoft\Windows\Temporary Internet Files\Virtualized>icacls .
. NT AUTHORITY\SYSTEM:(I)(OI)(CI)(F)
  BUILTIN\Administrators:(I)(OI)(CI)(F)
  DD36\ku_000:(I)(OI)(CI)(F)
  Mandatory Label\Low Mandatory Level:(OI)(CI)(NW)

C:\Users\ku_000\AppData\Local\Microsoft\Windows\Temporary Internet Files → [C:\Users\ku_000\AppData\Local\Microsoft\Windows\INetCache]

C:\Users\ku_000\AppData\Local\Temp\Low>icacls .
. NT AUTHORITY\SYSTEM:(I)(OI)(CI)(F)
  BUILTIN\Administrators:(I)(OI)(CI)(F)
  DD36\ku_000:(I)(OI)(CI)(F)
  Mandatory Label\Low Mandatory Level:(OI)(CI)(NW)

C:\Users\ku_000\AppData\LocalLow>icacls .
. NT AUTHORITY\SYSTEM:(OI)(CI)(F)
  BUILTIN\Administrators:(OI)(CI)(F)
  DD36\ku_000:(OI)(CI)(F)
  Mandatory Label\Low Mandatory Level:(OI)(CI)(NW)


今日この件が、ダウンロードアンダーバー問題と関係が有るのではないかと、ふと思い、調査に着手しました。

2015年10月16日金曜日

IDownloadManager の実装意義

Internet Explorer や WebBrowser コントロールには、ファイルのダウンロードをカスタマイズする機構が備わっているようです。

IDownloadManager interface
https://msdn.microsoft.com/en-us/library/aa753613(v=vs.85).aspx

インターフェイスの定義の方は、次のようになっています。

    MIDL_INTERFACE("988934A4-064B-11D3-BB80-00104B35E7F9")
    IDownloadManager : public IUnknown
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE Download( 
            /* [in] */ IMoniker *pmk,
            /* [in] */ IBindCtx *pbc,
            /* [in] */ DWORD dwBindVerb,
            /* [in] */ LONG grfBINDF,
            /* [in] */ BINDINFO *pBindInfo,
            /* [in] */ LPCOLESTR pszHeaders,
            /* [in] */ LPCOLESTR pszRedir,
            /* [in] */ UINT uiCP) = 0;
        
    };

要は GET や POST でダウンロードが必要な場合に



確認を求めてくる、あの画面です。

通常 Download が呼び出されますが。横取りされて、Download が履行されないケースも確認しています:

  • PDFファイルが、Adobe Acrobat Reader 等でインライン表示される場合。
  • テキスト形式に見えるファイルが、インライン表示される場合。

Download に渡ってくる引数につきまして:

  • pmk 以外は、ほとんど NULL。当てにできません。
  • POST の場合は、GET と同じ要領で来ます。判別する明確な方法は見つかっていません。


こういう物を見つけました。

IE custom download manager (CSIEDownloadManager)
https://code.msdn.microsoft.com/windowsdesktop/CSIEDownloadManager-8ab5d910

ビルドしたサンプルを参考までにお配りしています。

Setup_CSIEDownloadManager.exe
https://drive.google.com/file/d/0Bygl-em20CSKcEhKZFYxdVZUemM/view?usp=sharing

Windows 8.1 の IE11 でも動きましたので、IDownloadManager は未だ有効のようです。



2015年9月28日月曜日

mingw-g++ でスタティックリンクしたいんです

gcc ではなく、g++ でないといけなかったんです。

$ g++ b.cpp

$ od a.exe
        DLL Name: KERNEL32.dll
        DLL Name: msvcrt.dll
        DLL Name: libgcc_s_dw2-1.dll
        DLL Name: libstdc++-6.dll

od は、bash で  function od() { objdump -p $1 | grep "DLL Name"; }

いくつか mingw 由来と思われる DLL への参照が有ります。

$ g++ b.cpp -static

ビルドは通りました。

$ od a.exe
        DLL Name: KERNEL32.dll
        DLL Name: msvcrt.dll

おお。結果は満足するものになりました。

mingw-gcc (C言語) でスタティックリンクをしたい

例えば、libpng をスタティックリンクしたいんで。

$ gcc a.c
C:\msys32\tmp\ccUYzSGl.o:a.c:(.text+0x2a): undefined reference to `png_init_io'
collect2.exe: error: ld returned 1 exit status

-lpng が必要。

$ gcc a.c -lpng

ビルドは通りました。

$ od a.exe
        DLL Name: KERNEL32.dll
        DLL Name: msvcrt.dll
        DLL Name: libpng16-16.dll


od は、bash で  function od() { objdump -p $1 | grep "DLL Name"; }

libpng16-16.dll への参照が発生しました。これではダイナミックリンクになり、多数のファイルの配布が必要になってしまいます。

$ gcc -lpng a.c
C:\msys32\tmp\ccoKX062.o:a.c:(.text+0x2a): undefined reference to `png_init_io'
collect2.exe: error: ld returned 1 exit status

a.c の前につけたらダメですか。

$ gcc a.c -lpng -static
C:/msys32/mingw32/bin/../lib/gcc/i686-w64-mingw32/5.2.0/../../../../lib\libpng.a(png.o):(.text+0x139b): undefined reference to `crc32'
C:/msys32/mingw32/bin/../lib/gcc/i686-w64-mingw32/5.2.0/../../../../lib\libpng.a(png.o):(.text+0x13ee): undefined reference to `crc32'
C:/msys32/mingw32/bin/../lib/gcc/i686-w64-mingw32/5.2.0/../../../../lib\libpng.a(png.o):(.text+0x2725): undefined reference to `adler32'
C:/msys32/mingw32/bin/../lib/gcc/i686-w64-mingw32/5.2.0/../../../../lib\libpng.a(png.o):(.text+0x2739): undefined reference to `adler32'
C:/msys32/mingw32/bin/../lib/gcc/i686-w64-mingw32/5.2.0/../../../../lib\libpng.a(png.o):(.text+0x2766): undefined reference to `crc32'
C:/msys32/mingw32/bin/../lib/gcc/i686-w64-mingw32/5.2.0/../../../../lib\libpng.a(png.o):(.text+0x277a): undefined reference to `crc32'
C:/msys32/mingw32/bin/../lib/gcc/i686-w64-mingw32/5.2.0/../../../../lib\libpng.a(png.o):(.text+0x1c62): undefined reference to `inflateReset'
C:/msys32/mingw32/bin/../lib/gcc/i686-w64-mingw32/5.2.0/../../../../lib\libpng.a(pngread.o):(.text+0x4b78): undefined reference to `inflateEnd'
C:/msys32/mingw32/bin/../lib/gcc/i686-w64-mingw32/5.2.0/../../../../lib\libpng.a(pngrutil.o):(.text+0x2fd): undefined reference to `inflateReset2'
C:/msys32/mingw32/bin/../lib/gcc/i686-w64-mingw32/5.2.0/../../../../lib\libpng.a(pngrutil.o):(.text+0x332): undefined reference to `inflateInit2_'
C:/msys32/mingw32/bin/../lib/gcc/i686-w64-mingw32/5.2.0/../../../../lib\libpng.a(pngrutil.o):(.text+0x4e8): undefined reference to `inflate'
C:/msys32/mingw32/bin/../lib/gcc/i686-w64-mingw32/5.2.0/../../../../lib\libpng.a(pngrutil.o):(.text+0x68a): undefined reference to `inflateReset'
C:/msys32/mingw32/bin/../lib/gcc/i686-w64-mingw32/5.2.0/../../../../lib\libpng.a(pngrutil.o):(.text+0xab7): undefined reference to `inflate'
C:/msys32/mingw32/bin/../lib/gcc/i686-w64-mingw32/5.2.0/../../../../lib\libpng.a(pngrutil.o):(.text+0x49f8): undefined reference to `inflate'
C:/msys32/mingw32/bin/../lib/gcc/i686-w64-mingw32/5.2.0/../../../../lib\libpng.a(pngrutil.o):(.text+0x4ab6): undefined reference to `inflate'
C:/msys32/mingw32/bin/../lib/gcc/i686-w64-mingw32/5.2.0/../../../../lib\libpng.a(pngrutil.o):(.text+0x5486): undefined reference to `inflateReset'
C:/msys32/mingw32/bin/../lib/gcc/i686-w64-mingw32/5.2.0/../../../../lib\libpng.a(pngwrite.o):(.text+0x1aba): undefined reference to `deflateEnd'
C:/msys32/mingw32/bin/../lib/gcc/i686-w64-mingw32/5.2.0/../../../../lib\libpng.a(pngwutil.o):(.text+0x61a): undefined reference to `deflateInit2_'
C:/msys32/mingw32/bin/../lib/gcc/i686-w64-mingw32/5.2.0/../../../../lib\libpng.a(pngwutil.o):(.text+0x662): undefined reference to `deflateEnd'
C:/msys32/mingw32/bin/../lib/gcc/i686-w64-mingw32/5.2.0/../../../../lib\libpng.a(pngwutil.o):(.text+0x6f2): undefined reference to `deflateReset'
C:/msys32/mingw32/bin/../lib/gcc/i686-w64-mingw32/5.2.0/../../../../lib\libpng.a(pngwutil.o):(.text+0xba5): undefined reference to `deflate'
C:/msys32/mingw32/bin/../lib/gcc/i686-w64-mingw32/5.2.0/../../../../lib\libpng.a(pngwutil.o):(.text+0x2d7b): undefined reference to `deflate'
collect2.exe: error: ld returned 1 exit status

zlib が必要だそうです。

$ gcc a.c -lpng -lz -static

ビルドは通りました。

$ od a.exe
        DLL Name: KERNEL32.dll
        DLL Name: msvcrt.dll


スタティックリンクになりました。

$ gcc a.c -lpng -static -lz
$ gcc a.c -static -lpng -lz
$ gcc -static a.c -lpng -lz

-static の順序に関係なく、スタティックリンクになりました。

しかしこれで満足していません。追加で調査が必要です。。。