ãµã€ãšã³ã¹ãã£ã¯ã·ã§ã³ã®ãããŒãã«ã㯠ãäžåœã®äœå®¶Liu CixinïŒåæ 欣ïŒãäœåThe Three-Body Problem ïŒäžé«ïŒã§åãåã£ãããšãç¥ã£ãŠããŸãã ãã©ã¯ã»ãªããïŒ èšŒæ ïŒãšããŒã¯ã»ã¶ãã«ãŒããŒã°ïŒ 蚌æ ïŒã¯ãã®æ¬ã«æ³šæãæã£ãã
Olga Braathenã¯åœŒå¥³èªèº«ã®ã€ãã·ã¢ããã§ãã®æ¬ããã·ã¢èªã«ç¿»èš³ããŸããïŒ ããã§ã¯fb2ãããŠã³ããŒãã§ããŸã ïŒã
2016幎ã®ãããŒãã«è³ãã®ãã1ã€ã®åè£è ã¯ã Neven Stevenson ïŒéªåŽ©ãšã¯ãªããããã³ã³ãæžããïŒã§ã Sevenevesã®äœåïŒ ããããè±èªã§ããŠã³ããŒãã§ããŸã ã誰ããã·ã¢èªã«ç¿»èš³ããªãã£ãã®ã¯æ®å¿µã§ãïŒã
EDISONã®éçºè ã¯ãæ°å¹Žåã«æžããElectronic Document Access Controlããã°ã©ã ãäœæããŸãããä»æ¥ã¯ãFB2圢åŒã®é»åæžç±ã®ãµããŒããå®è£ ããSDKã«ã€ããŠèª¬æããŸãã
ã¯ããã«
å³æžé€šåéã§ã®æ å ±æè¡ã®äœ¿çšã¯ãèªè ã«ãã£ã¯ã·ã§ã³ãç§åŠããã³æè¡æç®ã®è±å¯ãªã»ãããžã®ãªã¢ãŒãã¢ã¯ã»ã¹ãæäŸããã€ã³ã¿ãŒããããµãŒãã¹ã®åºçŸããããããŸããã ãã®ãããªãµãŒãã¹ã¯ãåžæžè·ãæ°ããã¬ãã«ã«åŒãäžããŸãã å³æžé€šã¯åäžã®ãããã¯ãŒã¯ã«çµ±åãããããžã¿ã«åãããã³ã³ãã³ãã®å°ççã«åæ£ãã巚倧ãªããŒã¿ããŒã¹ã圢æããŸããã€ã³ã¿ãŒãããã§ã®å³æžé€šãµãŒãã¹ã®æäŸã¯ã察象èªè ãæ¡å€§ããè¿œå åå ¥ãæäŸããŸãã äž»èŠãªãŠãŒã¶ãŒã«ãã¡ãªããããããŸããæéããããŠå³æžé€šã蚪ããããæ¬ãå人çã«äœ¿çšããããã¿ã€ã ãªãŒã«é éãããããå¿ èŠããããŸããã ç¹å®ã®å°åã§ã¯å©çšã§ããªãçããæç®ãžã®ã¢ã¯ã»ã¹ãå¯èœã§ãã æš©å©è ã¯ãçžäºã«æçãªæ¡ä»¶ã§ã³ã³ãã³ããæäŸããããšã«ããããã€ã€ãªãã£ãåãåãããšãã§ããŸãã
å³æžé€šãµãŒãã¹ã§ã¯ãèäœæš©ã®éµå®ãšã³ããŒä¿è·ã«ç¹ã«æ³šæãæãããŸãã ç¬èªã®åœ¢åŒã¯ãã©ã³ã¹ããŒãã¬ãã«ã§äœ¿çšãããã¯ã©ã€ã¢ã³ãåŽã®ãœãããŠã§ã¢ã¯åä¿¡ããã³ã³ãã³ãããã£ã¹ã¯ã«ä¿åããªãã§ãã ããã
ã³ã³ãã³ãã®å€§éšåã¯ãã¹ãã£ããŒã䜿çšããŠç©çã¡ãã£ã¢ãæåã§ããžã¿ã«åããããã¹ããèªèããŠæ€çŽ¢ã§ããããã«ããããšã§çæãããŸããããããå¯äžã®ãœãŒã¹ã§ã¯ãããŸããã é»åæžç±ãä¿åããããã«èšèšãããå€ãã®ããžã¿ã«åœ¢åŒãããããããã®åœ¢åŒã§æ¢ã«ããžã¿ã«åãããæ¬ã¯å°ãªããããŸããã ãããã£ãŠãå³æžé€šãµãŒãã¹ã§ã¯ããŸããŸãªé»å圢åŒã®ãµããŒããå¿ èŠã§ãã ãµãŒãã¹ã®1ã€ã§ãã£ã¯ã·ã§ã³ããã¯åœ¢åŒã®é»åæžç±ã®ãµããŒããå°å ¥ããããã®SDKïŒéçºè ããŒã«ãããïŒã®éçºã«ã€ããŠã話ããŸãã
ææŠãã
ã³ã³ãã³ãé ä¿¡ãµãŒãã¹ã¯ããªã¢ãŒããªããžããªå ã®æç®ãžã®ããŒãžåäœã®ã¢ã¯ã»ã¹ããŠãŒã¶ãŒã«æäŸããŸãã åããŒãžãžã®ã¢ã¯ã»ã¹ã¯åºå®ããã課éãããŸãã ãã®ãµãŒãã¹ã¯å šææ€çŽ¢ãå®è£ ãããã®çµæã¯åéæã®é·æ¹åœ¢ã§åŒ·èª¿è¡šç€ºãããŸãã ãµãŒããŒãšã¯ã©ã€ã¢ã³ãéã®ãã©ãã£ãã¯ã¯ä¿è·ãããŠãããç¬èªã®ãã€ããªåœ¢åŒã§ãã
EDISONããã°ã©ããŒã¯ããœãªã¥ãŒã·ã§ã³ã®ãµãŒããŒéšåãšã¯ã©ã€ã¢ã³ãéšåãæ§ç¯ãããšãã«å ±éã®ã³ãŒãããŒã¹ã䜿çšããã ãã§ãªããFB2圢åŒã®é»åæžç±ã®ãµããŒãã®å®è£ ãç°¡çŽ åããããã«äœ¿çšã§ããäžé£ã®æ©èœãæçµéçºè ã«æäŸããSDKãäœæããã¿ã¹ã¯ã«çŽé¢ããŸããã
ãµãŒãã¹ã®æ©èœã«åºã¥ããŠãSDKé¢æ°ã®ã»ããã®èŠä»¶ãäºåã«æ±ºå®ãããŸããã
- æžèªæ å ±ã®ååŸã
- é»åæžç±ã®ããŒãžæ°ãååŸããã
- é¢é£ããŒãžãžã®ãªã³ã¯ãå«ãå šææ€çŽ¢çµæãååŸããã
- ãã«ããã¹ãæ€çŽ¢ã®çµæã匷調衚瀺ããããã«ãåè§åœ¢ã®åº§æšãååŸããŸãã
- ä»»æã®ããŒãžã³ã³ãã³ãããã€ããªåœ¢åŒã§åä¿¡ããããŒãžãã¬ã³ããªã³ã°ããŸãã
å®è£ ãšæè¡ïŒC ++ / Qt
解決ç
FB2ã®é»åæžç±ã¯1ããŒãžã®ããã¥ã¡ã³ãã§ãã ãã®åœ¢åŒã¯ãããã¥ã¡ã³ãã®å€èŠ³ã«é¢ããæ å ±ãæäŸããŸããã ãŸããããã¥ã¡ã³ãã®å 容ãè€è£œããã«ãFB2ããã¥ã¡ã³ããããŒãžã«åå²ããåé¡ã解決ããå¿ èŠããããŸããã ãã®çµæãå ã®ããã¥ã¡ã³ãã®è§£æãããã¥ã¡ã³ãã®ã¬ã³ããªã³ã°ããã³ããŒãžã³ã°ã®çµæãšããŠååŸããããå ã®FB2ããã¥ã¡ã³ãã«é¢ããã¡ã¿ããŒã¿ãæ ŒçŽããã€ã³ããã¯ã¹ãã¡ã€ã«åœ¢åŒãèšèšãããŸããã
ã€ã³ããã¯ã¹ãã¡ã€ã«ã«ã¯ãXMLããã¥ã¡ã³ãã®ãã©ã°ã¡ã³ãã®å Žæãããã¥ã¡ã³ãã®å é ããã®ãªãã»ããã®åœ¢åŒã§ããã©ã°ã¡ã³ãã®é·ããæåæ°ã§ãããã«XMLãã¬ãã£ãã¯ã¹ãå«ãŸããŠããŸãã
ã€ã³ããã¯ã¹ãã¡ã€ã«ã®æ§é ã«ã¯ã3ã€ã®ã»ã¯ã·ã§ã³ãå«ãŸããŸãã
- description-ããã¥ã¡ã³ãã®èª¬æãå«ããã©ã°ã¡ã³ãã
- ãã€ããª-å ã®ææžã«åçãå«ãŸãããã©ã°ã¡ã³ãã
- page-ããŒãžãµã€ãºãã€ã³ãã³ããããã³ãã©ã³ãã®éå§ãšçµäºã«æå®ããããã©ã¡ãŒã¿ãŒã䜿çšããã¬ã³ããªã³ã°ã®çµæãšããŠããŒãžãååŸãããããã¥ã¡ã³ãã®ãã©ã°ã¡ã³ãã
XMLããã¥ã¡ã³ãã®ãã©ã°ã¡ã³ãã®å Žæã«é¢ããæ å ±ã䜿çšãããšã解æããå¿ èŠãªãå ã®ããã¥ã¡ã³ãããç®çã®æ å ±ãå·®ãåŒãããšãã§ããŸããXMLãã¬ãã£ãã¯ã¹ã䜿çšãããšãç®çã®ããŒãžã®ã¿ã®ããŒã¯ã¢ãããå«ããããã¥ã¢XMLããã¥ã¡ã³ããäœæãã解æããŠããŠãŒã¶ãŒã®èŠæ±ã«å¿ããŠç®çã®ããŒãžãããã«ã¬ã³ããªã³ã°ã§ããŸãã
ããã¥ã¡ã³ãã®ããŒãžããŒã·ã§ã³ãå«ãã€ã³ããã¯ã¹ãã¡ã€ã«ã®äŸã
<document> <description> <fragment> <offset>418</offset> <length>5230</length> <prefix><![CDATA[<FictionBook xmlns="http://www.gribuser.ru/xml/fictionbook/2.0" xmlns:xlink="http://www.w3.org/1999/xlink">]]></prefix> </fragment> </description> <binary id="cover.jpg" > <fragment> <offset>43034</offset> <length>48151</length> </fragment> </binary> <page number="1" > <fragment> <offset>5657</offset> <length>1779</length> <prefix><![CDATA[<FictionBook xmlns="http://www.gribuser.ru/xml/fictionbook/2.0" xmlns:xlink="http://www.w3.org/1999/xlink"><body>]]></prefix> </fragment> </page> <page number="2" > <fragment> <offset>7436</offset> <length>2366</length> <prefix><![CDATA[<FictionBook xmlns="http://www.gribuser.ru/xml/fictionbook/2.0" xmlns:xlink="http://www.w3.org/1999/xlink"><body><section><section><p>]]></prefix> </fragment> </page> </document>
ããã¥ã¡ã³ããããŒãžã«åå²ããã¢ã«ãŽãªãºã ã®ã¢ã€ãã¢ããã£ããšããç§ãã¡ã¯ãããå®è£ ãå§ããŸããã ã€ã³ããã¯ã¹ãäœæããããã«ãQtã©ã€ãã©ãªã®æšæºã¯ã©ã¹ã䜿çšããŠå ã®ããã¥ã¡ã³ãã®ã¹ããªãŒãã³ã°è§£æã®æ¹æ³ãéžæããŸãããããã¯ãQXmlStreamReader :: characterOffsetã¡ãœããã䜿çšããŠXMLãã¡ã€ã«ãé£ç¶ããŠèªã¿åãããã¡ã€ã«å ã®ãªãã»ããã«é¢ããæ å ±ãæåæ°ã§æ ŒçŽã§ããããã§ãã
FB2ããã¥ã¡ã³ãã解æããããã»ã¹ã§ã¯ãã¿ã°ããã¿ã°ãžç§»åãããšãã«ãããã¥ã¡ã³ãã®æ®µèœãåèªã®ã»ããã«è§£æããããããåã³è¡ã«çµã¿ç«ãŠãããŸãã èšå®ãã¡ã€ã«ã«åŸã£ãŠãæå®ãããããŒãžäœçœã®å¹ ãšæ®µèœã®ã€ã³ãã³ããèæ ®ããŠãåè¡ãæå€§å¹ ã«èšå®ãããŸãã è¡ã®å Žåãèšå®ãã¡ã€ã«ã§æå®ãããè¡ééãæå®ãããŸãã XMLããã¥ã¡ã³ãã®ã¿ã°ã«å¿ããŠããã©ã³ããã©ã¡ãŒã¿ãŒããµã€ãºãã¹ã¿ã€ã«ãããã³é 眮ãèšå®ãããŸãã èŠåºããšå°èŠåºãã®å Žåã¯äžå€®æããèšå®ããããšãã°ã©ãã®å Žåã¯å³æããèšå®ãããããã©ã«ãã§ã¯å·Šæããèšå®ãããŸãã æååã«åèªãè¿œå ãããšãè¿œå ããããã¹ãŠã®åèªã®é·ããåèšããããšã«ãããæååã®é·ããåèšç®ãããŸãã è¡ã®é·ããæå®ãããããŒãžå¹ ãè¶ ããå Žåãè¡ã¯ããŒãžãªããžã§ã¯ãã«è¿œå ãããŸãã è¡ã«åãŸããªãåèªã¯æ¬¡ã®è¡ã«è¿œå ãããŸãã ããŒãžã«è¡ãè¿œå ãããšãè¡ééãèæ ®ããŠãã¹ãŠã®è¡ã®é«ããåèšç®ãããŸãã ç»åãåã蟌ããšããã©ã€ã³ã®é«ãã¯ãã©ã€ã³ã«è¿œå ããããªããžã§ã¯ãã®æ倧ã®é«ããšèŠãªãããå¿ èŠããããŸããã ã€ã³ãã³ããèæ ®ããŠãè¿œå ããããã¹ãŠã®è¡ã®é«ããæå®ãããããŒãžã®é«ããè¶ ããå Žåã次ã®ãã©ã°ã¡ã³ããã€ã³ããã¯ã¹ãã¡ã€ã«ã«è¿œå ãããŸãã 説æãããŠããã¢ã«ãŽãªãºã ã¯ãFB2ããã¥ã¡ã³ããããŒãžã«è§£æãããšããããã³ã€ã³ããã¯ã¹ãã¡ã€ã«ã䜿çšããŠããŒãžã«ã©ã³ãã ã«ã¢ã¯ã»ã¹ãããšãã«äœ¿çšãããŸãã
QXmlStreamReader :: characterOffsetã¡ãœããã¯ãããã¥ã¡ã³ãã®ããŒãžãžã®ã©ã³ãã ã¢ã¯ã»ã¹ã§ããã€ãæ°ã§ã¯ãªãæåæ°ã§ãªãã»ãããè¿ããããå ã®ãã¡ã€ã«ã®å é ãèªã¿åããããã¥ã¡ã³ãã®èå³æ·±ãéšåã ããå·®ãåŒãå¿ èŠããããŸãã seekã¡ãœããã䜿çšãããã€ãåäœã®ãã¡ã€ã«ãªãã»ããã¯ãå¿ ç¶çã«ãšã©ãŒã«ã€ãªãããŸãã
QString Document::documentFragment(uint offset, uint length) { QString fragment; QFile file(m_fileName); if (!file.open(QIODevice::ReadOnly)) { m_error = IOError; return fragment; } QTextStream fileStream(&file); fileStream.setCodec("UTF-8"); fileStream.setAutoDetectUnicode(true); fileStream.seek(0); fileStream.read(offset); fragment = fileStream.read(length); file.close(); if ((uint) fragment.size() < length) { m_error = IOError; fragment = QString(); return fragment; } return fragment; }
ããã«ãããããããããã©ãŒãã³ã¹ã®äœäžã¯ãããŸãã;ããã¥ã¡ã³ãã®æåŸã®ããŒãžãžã®ã¢ã¯ã»ã¹ã¯ãæåã®ããŒãžãžã®ã¢ã¯ã»ã¹ãšåããããéãã1ç§ãããããŸããã å®éã«ã¯ãFB2圢åŒã®åçã®ãªãæ¬ã®å¹³åããªã¥ãŒã ã10 MBãè¶ ããããšã¯ãã£ãã«ãããŸããã
7 MBãã¡ã€ã«ã998ããŒãžã«åå²ããã€ã³ããã¯ã¹ãæºåããã«ã¯ãçŽ10ç§ããããŸãã 9 MBãã¡ã€ã«ã1576ããŒãžã«åå²ããã«ã¯ãçŽ15ç§ããããŸãã å¹³åããŠã1ç§éã«çŽ100ããŒãžãã¬ã³ããªã³ã°ãããŸãã ã€ã³ããã¯ã¹ãããå Žåãããã¥ã¡ã³ãã¯50ããªç§ã§éããŸãã
次ã«ãããã¥ã¡ã³ãã®ããŒãžãåç §ããŠå šææ€çŽ¢ã®åé¡ã解決ããå¿ èŠããããŸããã ãããŠãããã§ã¯ãé床ã確ä¿ããããã«ãããã¥ã¡ã³ãã®ã³ã³ãã³ããè€è£œããå¿ èŠããããŸããããXMLããŒã¯ã¢ããã¯ãªããéåžžã®ããã¹ããã¡ã€ã«ã®åœ¢åŒã§ããã ããŒãžã®éå§ããŒã«ãŒãšçµäºããŒã«ãŒã¯ããŒããã€ããšããŠããã¹ãã€ã³ããã¯ã¹ã«æ¿å ¥ãããŸãã æ€çŽ¢çµæãããŒãžã«ãã€ã³ãããé·æ¹åœ¢ã®åº§æšãä¿åããã«ã¯ã2ã€ã®è£å©ã€ã³ããã¯ã¹ããã€ããªåœ¢åŒã§æŽçããå¿ èŠããããŸããã æ€çŽ¢çµæãããŒãžã«ãªã³ã¯ããããã®è£å©ã€ã³ããã¯ã¹ã«ã¯ãããŒãžçªå·ãããã¹ãã€ã³ããã¯ã¹ã®ããŒãžããŒã«ãŒã®éå§ãã€ããšçµäºãã€ãã®ã·ãªã¢ã«çªå·ãæ ŒçŽãããŸãã
å šææ€çŽ¢ã¯ã顧客ãæäŸããã©ã€ãã©ãªã䜿çšããŠå®è¡ãããç¹å®ã®åèªã®ãã¹ãŠã®åèªåœ¢åŒãè¿ãããŸãã æ€çŽ¢ã¯ãšãªã¯åèªã®ã»ããã«åå²ãããåèªããšã«ãã¹ãŠã®åèªåœ¢åŒãæ€çŽ¢ãããæ€çŽ¢ãããåèªåœ¢åŒã®çæãããé åã®ããã¹ãã€ã³ããã¯ã¹ã§æ€çŽ¢ãå®è¡ãããŸãã ããã¹ãã€ã³ããã¯ã¹ã®è£å©ã€ã³ããã¯ã¹ãšããŒãžéå§/çµäºããŒã«ãŒã䜿çšããŠãæ€çŽ¢çµæãå±ããããŒãžçªå·ã決å®ãããŸãã é·æ¹åœ¢ã®åº§æšãæã€è£å©ã€ã³ããã¯ã¹ã¯ãããŒãžãèŠæ±ããããšãã«ã®ã¿åœ¢æãããŸãã åããŒãžã«åå¥ã®ã€ã³ããã¯ã¹ãã¡ã€ã«ãçæãããŸãã åè§åœ¢ã®åº§æšãååŸããããã»ã¹ã§ã¯ãè¡ãåèªã«åå²ããååèªã®å¢çãèšç®ãããããå ã®ããã¥ã¡ã³ããããŒãžã«åå²ããããã®åãã¢ã«ãŽãªãºã ã䜿çšãããŸããã€ã³ããã¯ã¹ã¯ãåãããŒãžã«åãæ¿ãããšãã«ãã®ã¢ã«ãŽãªãºã ãå床åŒã³åºãããã®ãé²ãã®ã«åœ¹ç«ã¡ãŸãã
å šææ€çŽ¢çšã®ã€ã³ããã¯ã¹ã®äœæã«ã¯ãçŽ10 MBã®å®¹éã®ããã¥ã¡ã³ãã§çŽ1åããããŸãã ã€ã³ããã¯ã¹ãããå Žåãæ€çŽ¢ã¯1,576ããŒãžã®ããã¥ã¡ã³ãã§çŽ1ç§éæ©èœããŸãã
ãã1ã€ã®é©ãã¯ãèŠã€ãã£ãããã¹ãã®æçã®äžã«åéæã®é·æ¹åœ¢ã衚瀺ãããããšã§ãã åèªã®å¢çãèšç®ããããã®æ°åŠã¯ããšããšãã¯ã»ã«åäœã§ãã£ããããããã¥ã¡ã³ãã®ããŒãžãæ¡å€§çž®å°ãããšãã«ããã€ãã®ãã¯ã»ã«ã®äžæ£ç¢ºããçããŠããŸããã 解決çãèŠã€ãããŸãããæŽæ°ã®ä»£ããã«æµ®åå°æ°ç¹å€ã䜿çšããã³ãŒãã®å€§éšåãä¿®æ£ããŠãDPIåºåããã€ã¹ãèæ ®ããŠããã¹ãŠã®èšç®ãã€ã³ãã«å€æããå¿ èŠããããŸããã
m_dpiX = (qreal) QApplication::desktop()->physicalDpiX(); m_dpiY = (qreal) QApplication::desktop()->physicalDpiY(); QFontMetricsF fm(m_font); m_rect = fm.boundingRect(m_text); m_textDescent = fm.descent() / m_dpiY; qreal width = m_rect.width() / m_dpiX; qreal height = m_rect.height() / m_dpiY; m_rect.setSize(QSizeF(width, height));
ãã£ããã·ã¥ã©ã€ã³ã§ã¯ãäžé£ã®é·æ¹åœ¢ãå«ãããŒãžãã¥ãŒããã€ããªåœ¢åŒã«ã·ãªã¢ã«åããããããèªã¿æ»ããŠããŒãžã®ã³ã³ãã³ããã¯ã©ã€ã¢ã³ãã«è»¢éããåãSDKã䜿çšããŠã¬ã³ããªã³ã°ããåé¡ã解決ããããã«æ®ããŸããã ããã§ã¯ãã¹ãŠãéåžžã«ã·ã³ãã«ã§ããããšãå€æããŸãããæšæºã®QTã©ã€ãã©ãªã¯ã©ã¹ã§ããQDataStreamãå©ãã«ãªããŸããã
åé¡ã解決ããéçšã§ã次ã®ã¯ã©ã¹ãç¹å®ãããŸããã
- Fb2Document-ã¡ã€ã³ã¯ã©ã¹ã§ããFB2ããã¥ã¡ã³ãã¯ãããã¥ã¡ã³ãã®è§£æãããŒãžããŒã·ã§ã³ãã€ã³ããã¯ã¹åœ¢æã®ããžãã¯ãã«ãã»ã«åããçæãããã€ã³ããã¯ã¹ãšå šææ€çŽ¢ã䜿çšããŠä»»æã®ããŒãžãžã®ã¢ã¯ã»ã¹ãæäŸããŸãã
- Fb2Page -FB2ããã¥ã¡ã³ãã®ããŒãžãããŒãžã«äžé£ã®ããã¥ã¡ã³ãè¡ãå ¥åããããŒãžãã¬ã³ããªã³ã°ããããžãã¯ãã«ãã»ã«åããããŒãžã®çµããã®ãµã€ã³ã決å®ããŸãã ããŒãžã®å¹ ãšé«ããããã³ããŒãžã®ç«¯ããã®ã€ã³ãã³ããã€ã³ãåäœã§èšå®ããããã®ã€ã³ã¿ãŒãã§ã€ã¹ãæäŸããŸãã
- Fb2Word-æå®ããããã©ã³ããã©ã¡ãŒã¿ãŒã«åŸã£ãŠãããã¥ã¡ã³ãã®ãã£ã³ãã¹äžã®åèªå¢çãã€ã³ãåäœã§èšç®ããããžãã¯ãã«ãã»ã«åããåèªãããã¥ã¡ã³ãããŒãžã®åèªããã€ããªåœ¢åŒã§ã·ãªã¢ã«åãããã€ããªåœ¢åŒããåèªãèªã¿åããŸãã
- Fb2String-åèªã®ã»ããïŒFb2WordïŒããã®è¡ã§ãè¡ãåèªã®ãªã¹ãã§åããããžãã¯ãã«ãã»ã«åããè¡æ«ã®ç¬Šå·ã決å®ããèšå®ãã¡ã€ã«ã§æå®ãããè¡ééãèæ ®ããŠãè¡ãå·Šãå³ç«¯ãäžå€®ã«æãããã€ããªåœ¢åŒã§ããã¥ã¡ã³ãããŒãžã®è¡ãã·ãªã¢ã«åããèªã¿åããã€ããªåœ¢åŒã®æååããã
- Fb2Image-ããã¥ã¡ã³ãç»åã®ã¬ã³ããªã³ã°ãç»åã®ãã€ããªåœ¢åŒãžã®ã·ãªã¢ã«åããã€ããªåœ¢åŒããã®ç»åã®èªã¿åãã®ããžãã¯ãã«ãã»ã«åããç»åã
- Fb2Index-ã€ã³ããã¯ã¹ãã€ã³ããã¯ã¹ãã¡ã€ã«ã®åœ¢æãšèªã¿åãã®ããžãã¯ãã«ãã»ã«åããŸãã
- Fb2Fragment -FB2ããã¥ã¡ã³ãã®ãã©ã°ã¡ã³ãã¯ãã€ã³ããã¯ã¹ãã¡ã€ã«ã®åºæ¬æ§é ãè¡šããŸãã
- Fb2Settings-èšå®ãã¡ã€ã«ãèªã¿åã/æžã蟌ã¿èšå®ãã¡ã€ã«ãæäœããããžãã¯ãã«ãã»ã«åããŸãã
- Fb2Func-ã¯ã©ã¹ã©ãããŒã¯ãã¿ã¹ã¯ã®èšå®æã«æå®ãããã€ã³ã¿ãŒãã§ã€ã¹ã«åŸã£ãŠSDKé¢æ°ã®ã»ãããæäŸããŸãã
- èŸæž -圢æ åŠçèŸæžã®ã¯ã©ã¹ã©ãããŒã
ãã¹ãŠã®SDKã¯ã©ã¹ã®ã¡ãœããã¯åäœãã¹ãã§ã«ããŒãããFB2ããã¥ã¡ã³ããæ£ããããŒãžä»ããããŠããããšãããã³ã¯ã©ã€ã¢ã³ãããã°ã©ã ã®ãŠãŒã¶ãŒãããŒãžãèŠæ±ãããšãã«ãŸã£ããåãç»åã衚瀺ãããããšã確èªããŸããããŒãžã¯ã€ã³ããã¯ã¹ãã¡ã€ã«ãæºåãããšãã«ãµãŒããŒåŽã§æåã«ã¬ã³ããªã³ã°ãããŸãã
ãã®çµæãæçµç®æšãéæãããŸããã ç®±å ¥ããœãªã¥ãŒã·ã§ã³ãããSDKãéçºããå©ç¹ã¯æè»æ§ã§ãã æãé£ããéšåã¯åçŽãªé¢æ°ã®åŒã³åºãã®èåŸã«é ãããŠãããSDKã䜿çšããéçºè ã¯ããã®äœ¿çšæ¹æ³ãèªåã§æ±ºå®ã§ããŸããããšãã°ãã·ã¹ãã é¢æ°ã®é床ãšããå¿«é©ãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã確ä¿ããããã«äºåã«ã€ã³ããã¯ã¹ãæ§ç¯ããããããã¥ã¡ã³ããžã®æåã®ã¢ã¯ã»ã¹ãšæåã®æ€çŽ¢ã§ã€ã³ããã¯ã¹ãæ§ç¯ããããªã©ã§ããã£ã¹ã¯é åãç¯çŽããããã«ãŸãã«äœ¿çšããŠããããèŠæ±ããŠåé€ããŸãã
SDKã®ããã©ãŒãã³ã¹ãã客æ§ã«ç€ºãããã«ã2ã€ã®ãã¹ã¯ãããã¢ããªã±ãŒã·ã§ã³ããã®ããŒã¹ã§å®è£ ãããŸããã FictionBookReaderã¯ãFB2ããã¥ã¡ã³ãã®åºæ¬çãªãªãŒããŒã®æ©èœã«ãæ€çŽ¢çµæã®åŒ·èª¿è¡šç€ºã«ããããŒãžåå²ããã³å šææ€çŽ¢æ©èœãæäŸããŸãã
FB2SDKãã¢ã¯ãSDKã®ãµãŒããŒããã³ã¯ã©ã€ã¢ã³ãéšåã®æ©èœã瀺ããŸãã ãµãŒããŒããŒãã®æ©èœã¯[ãµãŒããŒ]ã¿ãã§åŒ·èª¿è¡šç€ºãããŸãããã®ã¿ãã§ã¯ãããã¥ã¡ã³ãã®è§£æãšãã«ãããŒãžã€ã³ããã¯ã¹ã®äœæãããã³åè§åœ¢ãšãã«ããã¹ãã€ã³ããã¯ã¹ã䜿çšãããã¡ã€ã«ã®äœæã瀺ããŸãã ã¯ã©ã€ã¢ã³ãããŒãã®æ©èœã¯ãçæããããã€ããªãã¡ã€ã«ã«åŸã£ãŠããã¥ã¡ã³ãããŒãžã®ã¬ã³ããªã³ã°ã瀺ã[ã¯ã©ã€ã¢ã³ã]ã¿ãã§åŒ·èª¿è¡šç€ºãããŸãã
ãã®ä»ã®ãããžã§ã¯ãïŒ
5233人æã§ãã€ã¯ããã¢ã°ã©ãçšã®ãœãããŠã§ã¢ãäœæããæ¹æ³
FB2圢åŒã®é»åæžç±ã®ãµããŒããå®è£ ããSDK
é»åææžãžã®ã¢ã¯ã»ã¹ã管çããŸãã DefViewããVivaldiãž
Axxon NextãšSureViewã®2ã€ã®ãããªç£èŠã·ã¹ãã ãçµ±åããŸã
Xç·ãã¢ã°ã©ãã£ãŒãœãããŠã§ã¢ã®éçºã®è©³çŽ°
ãã¹ã³ãŒããïŒæ°ååããã¯ããæãç£èŠããæ¹æ³
ããŒã¿ããŒã¹ãæäœããããã®ã·ã³ãã«ãªJIRAãã©ã°ã€ã³ã®éçº
DevOpsãæ¯æŽããïŒ1008æéã§Debianäžã®ãããã¯ãŒã¯ããã€ã¹ã®ãã¡ãŒã ãŠã§ã¢ãã«ããŒ
貧ãã人ã ã®ããã®AWSãä»ããWindows Auto Service Update