<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>2014/06/09 on Yano&#39;s digital garage</title>
    <link>https://www.bravotouring.com/~yano/archives/2014/06/09/</link>
    <description>Recent content in 2014/06/09 on Yano&#39;s digital garage</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Mon, 09 Jun 2014 23:50:15 +0900</lastBuildDate>
    <atom:link href="https://www.bravotouring.com/~yano/archives/2014/06/09/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>eyefiserver2</title>
      <link>https://www.bravotouring.com/~yano/diary/it/20140609eyefiserver2.htm</link>
      <pubDate>Mon, 09 Jun 2014 23:50:15 +0900</pubDate>
      <guid>https://www.bravotouring.com/~yano/diary/it/20140609eyefiserver2.htm</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://www.bravotouring.com/~yano/diary/it/20140418trusty.htm&#34;&gt;4月にTrusty化した&lt;span class=&#34;Host&#34;&gt;ML110G7&lt;/span&gt;&lt;/a&gt;でまだ十分に動作確認ができていなかったのが、&lt;a href=&#34;https://www.bravotouring.com/~yano/diary/it/20130515eyefiserver2.htm&#34;&gt;昨年5月&lt;/a&gt;に導入、&lt;a href=&#34;https://www.bravotouring.com/~yano/diary/it/20140125eyefi.htm&#34;&gt;1月に改修&lt;/a&gt;した&lt;a href=&#34;https://code.google.com/p/eyefiserver2/&#34;&gt;eyefiserver2&lt;/a&gt;。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.bravotouring.com/~yano/diary/it/20140603trusty.htm&#34;&gt;先日Trusty化した&lt;span class=&#34;Host&#34;&gt;GT110b&lt;/span&gt;&lt;/a&gt;ではすんなり動いているように思っていたのだが、実は&lt;span class=&#34;Software&#34;&gt;pyexiv2&lt;/span&gt;関連で発生したExceptionによってSOAPの応答が発行されず、電源が入る度にEye-Fiカードがアップロードを繰り返していた事が判明。&lt;/p&gt;&#xA;&lt;p&gt;よくよく調べてみると、&lt;a href=&#34;https://www.bravotouring.com/~yano/diary/it/20130515eyefiserver2.htm&#34;&gt;昨年5月&lt;/a&gt;のUbuntu 10.04では&lt;a href=&#34;http://packages.ubuntu.com/ja/lucid/python-pyexiv2&#34;&gt;lucidなpython-pyexiv2&lt;/a&gt;がバージョン 0.1.3だったので、APIはレガシーなpyexiv2.Imageやexif.readMetadataを使用する必要があったのだが、&lt;a href=&#34;http://packages.ubuntu.com/ja/precise/python-pyexiv2&#34;&gt;preciseなpython-pyexiv2&lt;/a&gt;以降はバージョン 0.3.2になっているので&lt;span class=&#34;Software&#34;&gt;pyexiv2&lt;/span&gt;関連のAPIはモダンなpyexiv2.ImageMetadataやexif.readに戻す必要があったという事だ。&lt;/p&gt;&#xA;&lt;blockquote class=&#34;Log&#34;&gt;&#xA;*** eyefiserver.py.orig 2012-06-28 13:16:46.000000000 +0900&lt;br/&gt;&#xA;--- eyefiserver.py      2014-06-10 00:14:38.685191477 +0900&lt;br/&gt;&#xA;***************&lt;br/&gt;&#xA;*** 56,61 ****&lt;br/&gt;&#xA;--- 56,62 ----&lt;br/&gt;&#xA;  from datetime import datetime&lt;br/&gt;&#xA;  import ConfigParser&lt;br/&gt;&#xA;&lt;br/&gt;&#xA;+ import re&lt;br/&gt;&#xA;&lt;br/&gt;&#xA;  class Daemon:&lt;br/&gt;&#xA;      &#34;&#34;&#34;&lt;br/&gt;&#xA;***************&lt;br/&gt;&#xA;*** 566,578 ****&lt;br/&gt;&#xA;      eyeFiLogger.debug(&#34;Using file_mode &#34; + file_mode)&lt;br/&gt;&#xA;      eyeFiLogger.debug(&#34;Using dir_mode &#34; + dir_mode)&lt;br/&gt;&#xA;&lt;br/&gt;&#xA;!     tempDir = os.path.dirname(self.server.config.get(&#39;EyeFiServer&#39;,&#39;upload_dir&#39;))&lt;br/&gt;&#xA;&lt;br/&gt;&#xA;&lt;br/&gt;&#xA;      imageTarPath = os.path.join(tempDir, imageTarfileName)&lt;br/&gt;&#xA;      eyeFiLogger.debug(&#34;Generated path &#34; + imageTarPath)&lt;br/&gt;&#xA;&lt;br/&gt;&#xA;-&lt;br/&gt;&#xA;      fileHandle = open(imageTarPath, &#39;wb&#39;)&lt;br/&gt;&#xA;      eyeFiLogger.debug(&#34;Opened file &#34; + imageTarPath + &#34; for binary writing&#34;)&lt;br/&gt;&#xA;&lt;br/&gt;&#xA;--- 567,581 ----&lt;br/&gt;&#xA;      eyeFiLogger.debug(&#34;Using file_mode &#34; + file_mode)&lt;br/&gt;&#xA;      eyeFiLogger.debug(&#34;Using dir_mode &#34; + dir_mode)&lt;br/&gt;&#xA;&lt;br/&gt;&#xA;!     tempDir = os.path.dirname(self.server.config.get(&#39;EyeFiServer&#39;,&#39;temp_dir&#39;))&lt;br/&gt;&#xA;!     if not os.path.isdir(tempDir):&lt;br/&gt;&#xA;!       eyeFiLogger.info(&#34;Creating folder &#34; + tempDir)&lt;br/&gt;&#xA;!       os.makedirs(tempDir)&lt;br/&gt;&#xA;&lt;br/&gt;&#xA;&lt;br/&gt;&#xA;      imageTarPath = os.path.join(tempDir, imageTarfileName)&lt;br/&gt;&#xA;      eyeFiLogger.debug(&#34;Generated path &#34; + imageTarPath)&lt;br/&gt;&#xA;&lt;br/&gt;&#xA;      fileHandle = open(imageTarPath, &#39;wb&#39;)&lt;br/&gt;&#xA;      eyeFiLogger.debug(&#34;Opened file &#34; + imageTarPath + &#34; for binary writing&#34;)&lt;br/&gt;&#xA;&lt;br/&gt;&#xA;***************&lt;br/&gt;&#xA;*** 586,634 ****&lt;br/&gt;&#xA;      imageTarfile = tarfile.open(imageTarPath)&lt;br/&gt;&#xA;&lt;br/&gt;&#xA;      for member in imageTarfile.getmembers():&lt;br/&gt;&#xA;!       #timezone = self.server.config.getint(&#39;EyeFiServer&#39;,&#39;timezone&#39;)&lt;br/&gt;&#xA;!       timezone = -7&lt;br/&gt;&#xA;        imageDate = datetime.fromtimestamp(member.mtime) - timedelta(hours=timezone)&lt;br/&gt;&#xA;        uploadDir = imageDate.strftime(self.server.config.get(&#39;EyeFiServer&#39;,&#39;upload_dir&#39;))&lt;br/&gt;&#xA;-       eyeFiLogger.debug(&#34;Creating folder &#34; + uploadDir)&lt;br/&gt;&#xA;        if not os.path.isdir(uploadDir):&lt;br/&gt;&#xA;            os.makedirs(uploadDir)&lt;br/&gt;&#xA;            if uid != 0 and gid != 0:&lt;br/&gt;&#xA;                 os.chown(uploadDir, uid, gid)&lt;br/&gt;&#xA;            if file_mode != &#34;&#34;:&lt;br/&gt;&#xA;                 os.chmod(uploadDir, string.atoi(dir_mode))&lt;br/&gt;&#xA;&lt;br/&gt;&#xA;!       f=imageTarfile.extract(member, uploadDir)&lt;br/&gt;&#xA;!       imagePath = os.path.join(uploadDir, member.name)&lt;br/&gt;&#xA;!       eyeFiLogger.debug(&#34;imamgePath &#34; + imagePath)&lt;br/&gt;&#xA;        if uid != 0 and gid != 0:&lt;br/&gt;&#xA;!         os.chown(imagePath, uid, gid)&lt;br/&gt;&#xA;        if file_mode != &#34;&#34;:&lt;br/&gt;&#xA;!         os.chmod(imagePath, string.atoi(file_mode))&lt;br/&gt;&#xA;!&lt;br/&gt;&#xA;!     eyeFiLogger.debug(&#34;Closing TAR file &#34; + imageTarPath)&lt;br/&gt;&#xA;!     imageTarfile.close()&lt;br/&gt;&#xA;&lt;br/&gt;&#xA;!     eyeFiLogger.debug(&#34;Deleting TAR file &#34; + imageTarPath)&lt;br/&gt;&#xA;!     os.remove(imageTarPath)&lt;br/&gt;&#xA;&lt;br/&gt;&#xA;&lt;br/&gt;&#xA;      try:&lt;br/&gt;&#xA;          import pyexiv2&lt;br/&gt;&#xA;&lt;br/&gt;&#xA;!         metadata = pyexiv2.ImageMetadata(imagePath)&lt;br/&gt;&#xA;!         metadata.read()&lt;br/&gt;&#xA;!         if &#39;Exif.Image.DateTime&#39; in metadata.exif_keys:&lt;br/&gt;&#xA;!             d = metadata[&#39;Exif.Image.DateTime&#39;].value&lt;br/&gt;&#xA;              seconds = time.mktime(d.timetuple())&lt;br/&gt;&#xA;              os.utime(imagePath, (seconds, seconds))&lt;br/&gt;&#xA;          else:&lt;br/&gt;&#xA;              eyeFiLogger.error(&#34;Could not find Exif.Image.DateTime field in EXIF information&#34;)&lt;br/&gt;&#xA;      except ImportError, e:&lt;br/&gt;&#xA;!         eyeFiLogger.error(&#34;pyexiv2 module not present. Could not read EXIF information.&#34;)&lt;br/&gt;&#xA;          if e.message != &#39;No module named pyexiv2&#39;:&lt;br/&gt;&#xA;              raise&lt;br/&gt;&#xA;&lt;br/&gt;&#xA;      # Create the XML document to send back&lt;br/&gt;&#xA;      doc = xml.dom.minidom.Document()&lt;br/&gt;&#xA;&lt;br/&gt;&#xA;--- 589,674 ----&lt;br/&gt;&#xA;      imageTarfile = tarfile.open(imageTarPath)&lt;br/&gt;&#xA;&lt;br/&gt;&#xA;      for member in imageTarfile.getmembers():&lt;br/&gt;&#xA;!       timezone = self.server.config.getint(&#39;EyeFiServer&#39;,&#39;timezone&#39;)&lt;br/&gt;&#xA;!       # timezone = -7&lt;br/&gt;&#xA;        imageDate = datetime.fromtimestamp(member.mtime) - timedelta(hours=timezone)&lt;br/&gt;&#xA;        uploadDir = imageDate.strftime(self.server.config.get(&#39;EyeFiServer&#39;,&#39;upload_dir&#39;))&lt;br/&gt;&#xA;        if not os.path.isdir(uploadDir):&lt;br/&gt;&#xA;+           eyeFiLogger.info(&#34;Creating folder &#34; + uploadDir)&lt;br/&gt;&#xA;            os.makedirs(uploadDir)&lt;br/&gt;&#xA;            if uid != 0 and gid != 0:&lt;br/&gt;&#xA;                 os.chown(uploadDir, uid, gid)&lt;br/&gt;&#xA;            if file_mode != &#34;&#34;:&lt;br/&gt;&#xA;                 os.chmod(uploadDir, string.atoi(dir_mode))&lt;br/&gt;&#xA;&lt;br/&gt;&#xA;!       eyeFiLogger.debug(&#34;member.name &#34; + member.name)&lt;br/&gt;&#xA;!       if re.match(r&#39;^.+\.(LOG)$(?i)&#39;, member.name) is not None:&lt;br/&gt;&#xA;!           continue&lt;br/&gt;&#xA;!&lt;br/&gt;&#xA;!       extractFilePath = os.path.join(uploadDir, member.name)&lt;br/&gt;&#xA;!       if os.path.exists(extractFilePath):&lt;br/&gt;&#xA;!           eyeFiLogger.info(extractFilePath + &#34; is exist.&#34;)&lt;br/&gt;&#xA;!           continue&lt;br/&gt;&#xA;!&lt;br/&gt;&#xA;!       f = imageTarfile.extract(member, uploadDir)&lt;br/&gt;&#xA;!       eyeFiLogger.info(&#34;extractFilePath &#34; + extractFilePath)&lt;br/&gt;&#xA;        if uid != 0 and gid != 0:&lt;br/&gt;&#xA;!         os.chown(extractFilePath, uid, gid)&lt;br/&gt;&#xA;        if file_mode != &#34;&#34;:&lt;br/&gt;&#xA;!         os.chmod(extractFilePath, string.atoi(file_mode))&lt;br/&gt;&#xA;!         seconds = time.mktime(imageDate.timetuple())&lt;br/&gt;&#xA;!         os.utime(extractFilePath, (seconds, seconds))&lt;br/&gt;&#xA;&lt;br/&gt;&#xA;!       if re.match(r&#39;^.+\.(JPE?G)$(?i)&#39;, member.name) is None:&lt;br/&gt;&#xA;!           continue&lt;br/&gt;&#xA;&lt;br/&gt;&#xA;+       imagePath = extractFilePath;&lt;br/&gt;&#xA;+       eyeFiLogger.debug(&#34;imagePath &#34; + extractFilePath)&lt;br/&gt;&#xA;&lt;br/&gt;&#xA;          try:&lt;br/&gt;&#xA;              import pyexiv2&lt;br/&gt;&#xA;&lt;br/&gt;&#xA;!             eyeFiLogger.debug(&#34;pyexiv2.Image: &#34; + imagePath)&lt;br/&gt;&#xA;!             exif = pyexiv2.ImageMetadata(imagePath)&lt;br/&gt;&#xA;!             exif.read()&lt;br/&gt;&#xA;!             if &#39;Exif.Image.DateTime&#39; in exif.exif_keys:&lt;br/&gt;&#xA;!                 d = exif[&#39;Exif.Image.DateTime&#39;].value&lt;br/&gt;&#xA;                  seconds = time.mktime(d.timetuple())&lt;br/&gt;&#xA;                  os.utime(imagePath, (seconds, seconds))&lt;br/&gt;&#xA;              else:&lt;br/&gt;&#xA;                  eyeFiLogger.error(&#34;Could not find Exif.Image.DateTime field in EXIF information&#34;)&lt;br/&gt;&#xA;          except ImportError, e:&lt;br/&gt;&#xA;!             eyeFiLogger.exception(&#34;pyexiv2 module not present. Could not read EXIF information.&#34;)&lt;br/&gt;&#xA;              if e.message != &#39;No module named pyexiv2&#39;:&lt;br/&gt;&#xA;                  raise&lt;br/&gt;&#xA;&lt;br/&gt;&#xA;+         except Exception, e:&lt;br/&gt;&#xA;+             eyeFiLogger.exception(e.message)&lt;br/&gt;&#xA;+             raise&lt;br/&gt;&#xA;+&lt;br/&gt;&#xA;+     eyeFiLogger.debug(&#34;Closing TAR file &#34; + imageTarPath)&lt;br/&gt;&#xA;+     imageTarfile.close()&lt;br/&gt;&#xA;+&lt;br/&gt;&#xA;+     eyeFiLogger.debug(&#34;Deleting TAR file &#34; + imageTarPath)&lt;br/&gt;&#xA;+     os.remove(imageTarPath)&lt;br/&gt;&#xA;+&lt;br/&gt;&#xA;+ #    try:&lt;br/&gt;&#xA;+ #        import pyexiv2&lt;br/&gt;&#xA;+ #&lt;br/&gt;&#xA;+ #     eyeFiLogger.debug(&#34;pyexiv2.Image: &#34; + imagePath)&lt;br/&gt;&#xA;+ #        exif = pyexiv2.Image(imagePath)&lt;br/&gt;&#xA;+ #        exif.readMetadata()&lt;br/&gt;&#xA;+ #        if &#39;Exif.Image.DateTime&#39; in exif.exifKeys():&lt;br/&gt;&#xA;+ #            d = exif[&#39;Exif.Image.DateTime&#39;]&lt;br/&gt;&#xA;+ #            seconds = time.mktime(d.timetuple())&lt;br/&gt;&#xA;+ #            os.utime(imagePath, (seconds, seconds))&lt;br/&gt;&#xA;+ #        else:&lt;br/&gt;&#xA;+ #            eyeFiLogger.error(&#34;Could not find Exif.Image.DateTime field in EXIF information&#34;)&lt;br/&gt;&#xA;+ #    except ImportError, e:&lt;br/&gt;&#xA;+ #        eyeFiLogger.error(&#34;pyexiv2 module not present. Could not read EXIF information.&#34;)&lt;br/&gt;&#xA;+ #        if e.message != &#39;No module named pyexiv2&#39;:&lt;br/&gt;&#xA;+ #            raise&lt;br/&gt;&#xA;+&lt;br/&gt;&#xA;      # Create the XML document to send back&lt;br/&gt;&#xA;      doc = xml.dom.minidom.Document()&lt;br/&gt;&#xA;&lt;br/&gt;&#xA;***************&lt;br/&gt;&#xA;*** 799,804 ****&lt;br/&gt;&#xA;--- 839,846 ----&lt;br/&gt;&#xA;    fileHandler.setFormatter(eyeFiLoggingFormat)&lt;br/&gt;&#xA;    eyeFiLogger.addHandler(fileHandler)&lt;br/&gt;&#xA;&lt;br/&gt;&#xA;+   eyeFiLogger.setLevel(config.getint(&#39;EyeFiServer&#39;,&#39;loglevel&#39;))&lt;br/&gt;&#xA;+   eyeFiLogger.info(&#34;Eye-Fi server started loglevel=&#34; + str(config.getint(&#39;EyeFiServer&#39;,&#39;loglevel&#39;)))&lt;br/&gt;&#xA;&lt;br/&gt;&#xA;    server_address = (config.get(&#39;EyeFiServer&#39;,&#39;host_name&#39;), config.getint(&#39;EyeFiServer&#39;,&#39;host_port&#39;))&lt;br/&gt;&#xA;&lt;br/&gt;&#xA;***************&lt;br/&gt;&#xA;*** 839,844 ****&lt;br/&gt;&#xA;--- 881,888 ----&lt;br/&gt;&#xA;      config = ConfigParser.SafeConfigParser()&lt;br/&gt;&#xA;      config.read(configfile)&lt;br/&gt;&#xA;&lt;br/&gt;&#xA;+     eyeFiLogger.setLevel(config.getint(&#39;EyeFiServer&#39;,&#39;loglevel&#39;))&lt;br/&gt;&#xA;+     eyeFiLogger.info(&#34;Eye-Fi server reload loglevel=&#34; + str(config.getint(&#39;EyeFiServer&#39;,&#39;loglevel&#39;)))&lt;br/&gt;&#xA;&lt;br/&gt;&#xA;  class MyDaemon(Daemon):&lt;br/&gt;&#xA;    def run(self):&lt;br/&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;参考まで、&lt;a href=&#34;https://www.python.org/&#34;&gt;Python&lt;/a&gt;系のライブラリパッケージ導入手順は&lt;blockquote class=&#34;Log&#34;&gt;yano@GT110b:~$ sudo apt-get install python-pyexiv2 python-dateutil python-tz python-parsedatetime python-configglue python-regex&lt;/blockquote&gt;。&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
