tag:blogger.com,1999:blog-24890417001968988362024-03-13T09:35:53.636-07:00wwarlockwwarlockhttp://www.blogger.com/profile/06957450265432764050noreply@blogger.comBlogger61125tag:blogger.com,1999:blog-2489041700196898836.post-13329462178528268752012-05-13T09:52:00.000-07:002012-05-13T09:59:28.245-07:00Как установить Java Development Kit (JDK) 7 Update 4 на MacOS 10.6 Snow Leopard<div dir="ltr" style="text-align: left;" trbidi="on">
<link href="http://alexgorbatchev.com/pub/sh/current/styles/shThemeEmacs.css" rel="stylesheet" type="text/css"></link>
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js" type="text/javascript">
</script>
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushBash.js" type="text/javascript">
</script>
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shAutoloader.js" type="text/javascript">
</script>
<script type="text/javascript">
SyntaxHighlighter.config.bloggerMode = true;
SyntaxHighlighter.all();
</script>
Идём на <a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html" target="_blank">официальный сайт Oracle</a> и качаем jdk-7u4-macosx-x64.dmg.<br />
Монтируем. Пока всё стандартно.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSsyGLZDrqRoTIBxPiTdtQDvrKMrC0sshGDVmDBbWcJ391DFWtOSXu020fs5M-OEsjPWC_nh2cWnr3qdbaPVfZ9Mp5pYAYaxtebpAQDsthyphenhyphenc6GEM8fJDeKXuRVz8VBSl7Csm1ddZQuHeK7/s1600/%D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA+%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0+2012-05-13+%D0%B2+19.22.23.png" imageanchor="1"><img border="0" height="245" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSsyGLZDrqRoTIBxPiTdtQDvrKMrC0sshGDVmDBbWcJ391DFWtOSXu020fs5M-OEsjPWC_nh2cWnr3qdbaPVfZ9Mp5pYAYaxtebpAQDsthyphenhyphenc6GEM8fJDeKXuRVz8VBSl7Csm1ddZQuHeK7/s400/%D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA+%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0+2012-05-13+%D0%B2+19.22.23.png" width="400" /></a></div>
<br />
<br />
Пытаемся открыть...<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEin7m1g9uOKCEhE6dU_u2Escr4cC3wigOZppaiCuZ8tFA6OX9dD83fGkxhyiLCsFwPij2iIrLen4U9hywJH15-VuRN4aweQVFxZiHTX_AguMUURJ7NF-2GDCxuuwDTlGqhrshyphenhyphenOxCKPEvxi/s1600/%D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA+%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0+2012-05-13+%D0%B2+19.19.34.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="282" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEin7m1g9uOKCEhE6dU_u2Escr4cC3wigOZppaiCuZ8tFA6OX9dD83fGkxhyiLCsFwPij2iIrLen4U9hywJH15-VuRN4aweQVFxZiHTX_AguMUURJ7NF-2GDCxuuwDTlGqhrshyphenhyphenOxCKPEvxi/s400/%D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA+%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0+2012-05-13+%D0%B2+19.19.34.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><div style="font-size: medium; text-align: center;">
OS X Lion required</div>
<div style="font-size: medium; text-align: center;">
This Installer is supported only on OS X Lion (10.7.0)</div>
</td></tr>
</tbody></table>
<br />
И тихо сквозь зубы материмся: "Ну, не настолько мы ещё устарели, чтобы нас так игнорировать".<br />
Да и, по слухам, проблемы со стабильностью есть у Льва.<br />
<br />
Но на каждую драную кошку у нас найдётся свой кобель.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEincntdhyphenhyphenBbg01PEbW6Y-VVI2mwcii7sYPXlUYxk9W7LT3JeG1djjJuXhWr6HrBiAwoEZjhcibs3cHdxxxNtr3LJyn3gmqLEQLfmiYWOndsBzaphdx-UeCOOagSzS85CwJw9OPR56HrylxT/s1600/%D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA+%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0+2012-05-13+%D0%B2+19.31.34.png" imageanchor="1"><img border="0" height="256" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEincntdhyphenhyphenBbg01PEbW6Y-VVI2mwcii7sYPXlUYxk9W7LT3JeG1djjJuXhWr6HrBiAwoEZjhcibs3cHdxxxNtr3LJyn3gmqLEQLfmiYWOndsBzaphdx-UeCOOagSzS85CwJw9OPR56HrylxT/s640/%D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA+%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0+2012-05-13+%D0%B2+19.31.34.png" width="640" /></a></div>
<br />
Сейчас эту роль сыграет PackageMaker.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1CtV0IPPE2YO-9xxMdhkTSjRCI0vvNK_KMAQBBsvIZnCYM8ygSifyOn6MWez9et9K148K4mxL3rFdEOsDOZYV1WN3fXZAZ64SoYDzOGdeTAQlXywDp1XmxcgdVK8_HyHrvLSFP3HBNJDP/s1600/%D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA+%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0+2012-05-13+%D0%B2+19.33.53.png" imageanchor="1"><img border="0" height="380" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1CtV0IPPE2YO-9xxMdhkTSjRCI0vvNK_KMAQBBsvIZnCYM8ygSifyOn6MWez9et9K148K4mxL3rFdEOsDOZYV1WN3fXZAZ64SoYDzOGdeTAQlXywDp1XmxcgdVK8_HyHrvLSFP3HBNJDP/s640/%D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA+%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0+2012-05-13+%D0%B2+19.33.53.png" width="640" /></a></div>
<br />
Вот он, наш спаситель. В лучах прожекторов и грядущей славы.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0kbJ1uM4MTpgfRVAF6wk6hc8BDdLUzurphpr3HaBGdZiMptdNn-RQDSS0YFKoqTiQZSPwNhPt49l1qvaWPR-JZ9i0lADP_2QfjK5eBPLaQHKb3fRyoqG8-l_YSa9AlLM-5coxRLIAkaXN/s1600/%D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA+%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0+2012-05-13+%D0%B2+19.42.40.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="412" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0kbJ1uM4MTpgfRVAF6wk6hc8BDdLUzurphpr3HaBGdZiMptdNn-RQDSS0YFKoqTiQZSPwNhPt49l1qvaWPR-JZ9i0lADP_2QfjK5eBPLaQHKb3fRyoqG8-l_YSa9AlLM-5coxRLIAkaXN/s640/%D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA+%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0+2012-05-13+%D0%B2+19.42.40.png" width="640" /></a></div>
<br />
Дальше должно быть очевидно.<br />
Required либо превращается в Optional, либо исчезает. Я шел по первому пути.<br />
<br />
Далее необходимо исправить Destination в пакете установки, дописав "/System" вначале.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilFXnyyz76OgCrbCzsovrJnNlkq0oPJGlb00J-ypV63DXtKU8snEvOzJCW1qJlm54zcSPzJ6_1RLBb0v24nrr4xTxFLBXQ-BASZ_4fraM_kKwMcNxM9m36qPStAUlhYwX7R0YUOIQUiylU/s1600/%D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA+%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0+2012-05-13+%D0%B2+19.46.13.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilFXnyyz76OgCrbCzsovrJnNlkq0oPJGlb00J-ypV63DXtKU8snEvOzJCW1qJlm54zcSPzJ6_1RLBb0v24nrr4xTxFLBXQ-BASZ_4fraM_kKwMcNxM9m36qPStAUlhYwX7R0YUOIQUiylU/s640/%D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA+%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0+2012-05-13+%D0%B2+19.46.13.png" width="640" /></a></div>
<br />
Должно получиться "/System/Library/Java/JavaVirtualMachines".<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEit9zd_3puSHpFWN-mPSRTIrz0r9nlU3Z3I_ChsqkIxT0fMyhyu03eGwJlwoGMqazIf30AJZZ3SWuFijEHeoOA3q-p_-YAe5EJ-jJ5T4TPznhS6X4hRBSsJ9NIi4_s9QPkmC9vhW2YlmIN9/s1600/%D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA+%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0+2012-05-13+%D0%B2+19.47.04.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEit9zd_3puSHpFWN-mPSRTIrz0r9nlU3Z3I_ChsqkIxT0fMyhyu03eGwJlwoGMqazIf30AJZZ3SWuFijEHeoOA3q-p_-YAe5EJ-jJ5T4TPznhS6X4hRBSsJ9NIi4_s9QPkmC9vhW2YlmIN9/s640/%D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA+%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0+2012-05-13+%D0%B2+19.47.04.png" width="640" /></a></div>
<br />
Иначе потом придётся переносить руками с помощью "sudo mv".<br />
Если этого не сделать, то новая версия не появится в настройках Java ( Java Preferences ).<br />
<br />
Опцию "Restart Action" можно выставить в "None", если по какой-то причине нельзя прерывать текущую сессию.<br />
<br />
Далее жмём Build и выбираем место сохранения нового пакета.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg547KM5ymg6iubhqwYx9E8qavFzcTOWdi1-YDFr1-w30Zeo05kr8RL-V8Hn9BXA5Iw0Yn_PYGIzNWAM43KwPnA7oCqZ-YymgkynqQIxDbMlXrKp3qQ5sSvcBW-TjJdrvEM55eJhGsZHlHr/s1600/%D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA+%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0+2012-05-13+%D0%B2+19.56.25.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="362" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg547KM5ymg6iubhqwYx9E8qavFzcTOWdi1-YDFr1-w30Zeo05kr8RL-V8Hn9BXA5Iw0Yn_PYGIzNWAM43KwPnA7oCqZ-YymgkynqQIxDbMlXrKp3qQ5sSvcBW-TjJdrvEM55eJhGsZHlHr/s640/%D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA+%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0+2012-05-13+%D0%B2+19.56.25.png" width="640" /></a></div>
<br />
"Save" и чуть-чуть ждём.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwzmz5AUASoQOUBUfVHjQz_BVKPfG1-XEcZd3pPOxRuKCikWSMd74eLNIpfQfN3o_j3cv588aJSf90ORr-dVahsojF2HuoeCbDZQvSDK-L2c8p1n33qdlW4MDF6DQZudBoTbDN_MfBaN3r/s1600/%D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA+%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0+2012-05-13+%D0%B2+19.56.48.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="362" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwzmz5AUASoQOUBUfVHjQz_BVKPfG1-XEcZd3pPOxRuKCikWSMd74eLNIpfQfN3o_j3cv588aJSf90ORr-dVahsojF2HuoeCbDZQvSDK-L2c8p1n33qdlW4MDF6DQZudBoTbDN_MfBaN3r/s640/%D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA+%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0+2012-05-13+%D0%B2+19.56.48.png" width="640" /></a></div>
<br />
Готово.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgViF777QIhX6NRRoZp96Mb4n0d4irNjbhaWBQ5SQHsnr8kHZHjHOijhpC3BN6ODqxgYVgAPpItAdtixrgJazwHjChxTDfNwTSx4gH-PV-zs4xhE7mdDUdq-3u8gLZ-W9A_KMLFiLb6Pnq8/s1600/%D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA+%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0+2012-05-13+%D0%B2+19.58.15.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="496" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgViF777QIhX6NRRoZp96Mb4n0d4irNjbhaWBQ5SQHsnr8kHZHjHOijhpC3BN6ODqxgYVgAPpItAdtixrgJazwHjChxTDfNwTSx4gH-PV-zs4xhE7mdDUdq-3u8gLZ-W9A_KMLFiLb6Pnq8/s640/%D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA+%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0+2012-05-13+%D0%B2+19.58.15.png" width="640" /></a></div>
<br />
Открываем новый пакет и следуем инструкциям.<br />
По завершении установки, необходимо открыть Настройки Java ( Java Preferences ).<br />
<br />
<pre class="brush: bash; gutter: false; toolbar: false;">open "/Applications/Utilities/Java Preferences.app"
</pre>
<br />
либо<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPlPU0KVhwVB9x4A67UuIO7KhPC_z8GvOaBMQfQ2nvLTyjkcSEsXfgYezpcaRvpZSIJBdPV0T2EifJHkl9iZdkQhi5dNXuCt5gh2H333OuUlrvCYnGj2d0Rr90IvNiX3yq4EcGkhRkvn5N/s1600/%D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA+%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0+2012-05-13+%D0%B2+20.02.00.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="140" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPlPU0KVhwVB9x4A67UuIO7KhPC_z8GvOaBMQfQ2nvLTyjkcSEsXfgYezpcaRvpZSIJBdPV0T2EifJHkl9iZdkQhi5dNXuCt5gh2H333OuUlrvCYnGj2d0Rr90IvNiX3yq4EcGkhRkvn5N/s640/%D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA+%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0+2012-05-13+%D0%B2+20.02.00.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div style="text-align: left;">
и перетащить Java SE 7 наверх списка.</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXXS0-Vp-zfVBaMmL4F92GS6KnvOBIPlOeg0t9Wvh4n6adBUVzd2VrUNJnhvIB-1rnbGd-hQ-KkUqECrS0S8H7c5k_UlOPC3ZAcfXiWqeoBMvee5QLNJoPptPipoaACD8aoPFOWKtEkNmm/s1600/%D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA+%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0+2012-05-13+%D0%B2+20.03.05.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="448" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXXS0-Vp-zfVBaMmL4F92GS6KnvOBIPlOeg0t9Wvh4n6adBUVzd2VrUNJnhvIB-1rnbGd-hQ-KkUqECrS0S8H7c5k_UlOPC3ZAcfXiWqeoBMvee5QLNJoPptPipoaACD8aoPFOWKtEkNmm/s640/%D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA+%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0+2012-05-13+%D0%B2+20.03.05.png" width="640" /></a></div>
<br />
И последний шаг<br />
<br />
<br />
<pre class="brush: bash; gutter: false; toolbar: false;">$ java -version
java version "1.7.0_04"
Java(TM) SE Runtime Environment (build 1.7.0_04-b21)
Java HotSpot(TM) 64-Bit Server VM (build 23.0-b21, mixed mode)
</pre>
<br />
<br />
<br />
<br /></div>wwarlockhttp://www.blogger.com/profile/06957450265432764050noreply@blogger.com0tag:blogger.com,1999:blog-2489041700196898836.post-73502248446891780132012-05-07T05:16:00.002-07:002012-05-22T12:15:13.334-07:00Кроссплатформная проблема длинных имен файлов (Crossplatform long file name problem)<div dir="ltr" style="text-align: left;" trbidi="on">
<link href="http://alexgorbatchev.com/pub/sh/current/styles/shThemeEmacs.css" rel="stylesheet" type="text/css"></link>
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js" type="text/javascript">
</script>
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushBash.js" type="text/javascript">
</script>
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shAutoloader.js" type="text/javascript">
</script>
<script type="text/javascript">
SyntaxHighlighter.config.bloggerMode = true;
SyntaxHighlighter.all();
</script>
<br />
<div dir="ltr" style="text-align: left;" trbidi="on">
Хотя я демонстрирую ошибку на примере работы с системами контроля версий для MacOsX и Windows - это проблема более глобальная и поймать её вы можете в любой другой комбинации софта (да хоть в той же Samba).<br />
Используемый подход решения проблемы наверняка не единственный, но, при этом, довольно универсален.<br />
<br />
Различные файловые системы по разному хранят информацию об имени файла.<br />
Из-за чего возникают коллизии если разработка ведётся многими людьми и у всех разные ОС.<br />
В моём случае получилось так, что другой разработчик закоммитил в репозиторий файл длиной 180 русских букв.<br />
<br />
<pre class="brush: bash; gutter: false; toolbar: false;">$ echo "яяяяяяяяя яя яяяя яя яяяяяяяяяя яяяяяяяяя я яяяяяя я яяя яяяяяяяяя яяяяяяяяяяяяя яяяяяяяя я яяяяяяяяяяяяяяяяяя яяяяяя яя яяяяяя яяяяяяяяяяяяя яяяяяяяя яяяяя яяяяяя я яяя яяяяя яяя" | wc -m
180
</pre>
<br />
Но<br />
<br />
<pre class="brush: bash; gutter: false; toolbar: false;">$ echo "яяяяяяяяя яя яяяя яя яяяяяяяяяя яяяяяяяяя я яяяяяя я яяя яяяяяяяяя яяяяяяяяяяяяя яяяяяяяя я яяяяяяяяяяяяяяяяяя яяяяяя яя яяяяяя яяяяяяяяяяяяя яяяяяяяя яяяяя яяяяяя я яяя яяяяя яяя" | wc -c
334</pre>
<br />
Русские буквы занимают два байта вместо одного.<br />
При попытке создать такой файл под MacOsX на диске со стандартной файловой системой HFS+<br />
<br />
<pre class="brush: bash; gutter: false; toolbar: false;">$ touch "яяяяяяяяя яя яяяя яя яяяяяяяяяя яяяяяяяяя я яяяяяя я яяя яяяяяяяяя яяяяяяяяяяяяя яяяяяяяя я яяяяяяяяяяяяяяяяяя яяяяяя яя яяяяяя яяяяяяяяяяяяя яяяяяяяя яяяяя яяяяяя я яяя яяяяя яяя"</pre>
<br />
Получим странное<br />
<br />
<pre class="brush: bash; gutter: false; toolbar: false;">$ ls я*
яяяяяяяяя яя яяяя яя яяяяяяяяяя яяяяяяяяя я яяяяяя я яяя яяяяяяяяя яяяяяяяяяяяяя яяяяяяяя я яяяяяяяяяяяяяяяяяя яяяяяя яя яяяяяя яяяя#299CD031</pre>
<br />
Несмотря на заявляемые 255 знаков в кодировке UTF-16 (точно также в NTFS).<br />
А если такой файл попробовать отредактировать, например с помощью vim, то после сохранения и выхода <br />
<pre class="brush: bash; gutter: false; toolbar: false;">:wq</pre>
файл исчезает.<br />
<br />
Кстати, несмотря на то, что некоторые ФС поддерживают ещё более длинные имена, штатные утилиты linux, по всей вероятности, всё равно оперируют байтами и поэтому комманда <i>touch</i> мне стабильно выдавала ошибку: “File name too long”<br />
Я, например, пробовал ReiserfFS под Ubuntu 12.04 LTS.<br />
<br />
Возвращаясь к MacOs. Именно <a href="http://stackoverflow.com/questions/10281072/git-svn-rebase-file-name-too-long">эту ошибку</a> я поймал при попытке получить последние изменения из репозитория.<br />
<pre class="brush: bash; gutter: false; toolbar: false;">$ git svn rebase
First, rewinding head to replay your work on top of it...
error: cannot stat '$73_chars_4_deep_levels_path_with_spaces/$180_chars_file_name_with_spaces_too': File name too long
error: cannot stat '$73_chars_4_deep_levels_path_with_spaces/$180_chars_file_name_with_spaces_too': File name too long
error: cannot stat '$73_chars_4_deep_levels_path_with_spaces/$180_chars_file_name_with_spaces_too': File name too long
could not detach HEAD
rebase refs/remotes/git-svn: command returned error: 1
</pre>
<br />
Первой моей идеей стало установить Windows внутри VirtualBox и там настроить Cygwin, т.к. в этой экосистеме файлы с длинными именами чувствуют себя вольготно.<br />
Но, всё-таки, ОС внутри виртуальной машины - это довольно тяжелая штука в плане потребления ресурсов.<br />
К тому же, Cygwin/MSysGit имеют и <a href="http://stackoverflow.com/search?q=cygwin+git">другие проблемы</a>, с которыми приходится периодически бороться.<br />
<br />
И, вот, после неудачи с Windows и Ubuntu, ко мне пришла идея попробовать создать образ диска с подходящей ФС средствами MacOS.<br />
<br />
Хотя Linux и позволяет создавать и монтировать образы дисков даже более гибко, но надо что-то в нём докручивать, либо чтобы ядро поддерживало длинные уникодные имена, либо выставлять однобайтную локаль и на лету конвертировать файлы с помощью чего-то вроде iconv или средствами самого гита.<br />
<div>
<br /></div>
<div>
В комплекте с макосью идёт инструмент DiskUtility.</div>
<div>
Где я для начала попробовал создать DMG-образы с NTFS.</div>
Но, вероятно, имеющиеся у меня драйверы NTFS-3G и Tuxero, содержат ошибку.</div>
<div>
В обоих случаях я получал до боли знакомый “File name too long”.</div>
<div>
<br /></div>
<div>
Удача меня ждала с ФС ExFat.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyHiVGWECVW7kCa5QbsJbTJdntqdIhBtb2fsFBbA4JdcydKn0aKevNvgOLTle-YWerm5SB77CY_LtRIVD7Yj9rQIo5Ax3zV08fmOx1RkTnl-65A6x2s6Ka3-WrbJOqclBzeaSOdDygfCWv/s1600/%D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA+%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0+2012-05-07+%D0%B2+15.58.41.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="528" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyHiVGWECVW7kCa5QbsJbTJdntqdIhBtb2fsFBbA4JdcydKn0aKevNvgOLTle-YWerm5SB77CY_LtRIVD7Yj9rQIo5Ax3zV08fmOx1RkTnl-65A6x2s6Ka3-WrbJOqclBzeaSOdDygfCWv/s640/%D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA+%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0+2012-05-07+%D0%B2+15.58.41.png" width="640" /></a></div>
<br /></div>
<div>
<br /></div>
<div>
<pre class="brush: bash; gutter: false; toolbar: false;">$ touch "яяяяяяяяя яя яяяя яя яяяяяяяяяя яяяяяяяяя я яяяяяя я яяя яяяяяяяяя яяяяяяяяяяяяя яяяяяяяя я яяяяяяяяяяяяяяяяяя яяяяяя яя яяяяяя яяяяяяяяяяяяя яяяяяяяя яяяяя яяяяяя я яяя яяяяя яяя"</pre>
<br />
И, ву-а-ля<br />
<br />
<pre class="brush: bash; gutter: false; toolbar: false;">$ ls я*
яяяяяяяяя яя яяяя яя яяяяяяяяяя яяяяяяяяя я яяяяяя я яяя яяяяяяяяя яяяяяяяяяяяяя яяяяяяяя я яяяяяяяяяяяяяяяяяя яяяяяя яя яяяяяя яяяяяяяяяяяяя яяяяяяяя яяяяя яяяяяя я яяя яяяяя яяя
</pre>
<br />
После перемещения своего проекта в новый раздел, вся остальная операция прошла как по-маслу.<br />
<br />
Далее, можно почитать про <a href="http://wwarlock.blogspot.com/2012/01/macosx-unicode-hfs.html" target="_blank">Unicode в названиях файлов в HFS</a>.</div>
</div>wwarlockhttp://www.blogger.com/profile/06957450265432764050noreply@blogger.com0tag:blogger.com,1999:blog-2489041700196898836.post-51487666521582007992012-02-26T04:25:00.002-08:002012-10-30T02:42:25.409-07:00Шутка про UDP, TCP, ARP<div dir="ltr" style="text-align: left;" trbidi="on">
<div style="text-align: -webkit-auto;">
<span style="font-family: Arial, Helvetica, sans-serif;"></span></div>
<blockquote class="tr_bq">
Я знаю две шутки: про UDP и про TCP.<br />
Не могу гарантировать, что до вас дойдёт первая.<br />
Но пока не дойдёт вторая, я буду повторять её снова и снова.<br />
Дошла ли шутка про TCP? Ок, ничего страшного, сейчас повторю чуть медленнее.<br />
Была ещё третья - про ARP. Кто-нибудь знает у кого сейчас она? Скажите мне.</blockquote>
(C) не мой.<br />
Я, лишь скомпилировал и оттранслировал из <a href="https://twitter.com/#!/hatarist/status/173197263433248771">разных</a> <a href="http://juick.com/wwarlock/1775815">исходников</a> (собрал в одну кучу и перевёл на русский)<br />
<br />
В оригинале шутки звучат так:<br />
<blockquote class="tr_bq">
I know a joke about UDP but I can't guarantee you'll get it.<br />
I know a TCP joke and I'll keep telling it until you get it.<br />
You didn't get my joke about TCP? It's okay, I'll tell it to you again slower.<br />
Anyone know who has an ARP joke? Tell me</blockquote>
</div>
wwarlockhttp://www.blogger.com/profile/06957450265432764050noreply@blogger.com0tag:blogger.com,1999:blog-2489041700196898836.post-66158414592206576362012-01-30T01:14:00.003-08:002020-05-12T09:22:28.809-07:00Скрипт Ruby для вычисления SHA1 по аналогии с Git<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
<br />
Некоторое время назад, участвовал в одном <a href="http://juick.com/dmz/1374908">обсуждении</a>.<br />
Тогда же, по его результатам, родился небольшой скриптик.<br />
Вкратце, это действует так.<br />
Если вы когда-то давным-давно закоммитили файл. Потом имя (но не содержимое) этого файла несколько раз менялось.<br />
А сейчас вам необходимо найти содержимое блоба, зная только текущее наименование файла.<br />
<br />
Следующий скрипт должен помочь.
<script src="https://pastebin.com/embed_js/Ge0Wjh4J"></script>
<br />
<br />
<br />
Выполните:<br />
$ git-sha1.rb filename1 filename2 ... filenameN<br />
<br />
На выходе получите список хешей:<br />
sha1_1<br />
sha1_2<br />
...<br />
sha1_N<br />
<br />
Теперь можно попробовать найти нужный блоб.<br />
$ git show sha1_N<br />
<br />
Так же исходный код этого срипта можно взять на <a href="https://github.com/wwarlock/ruby-git-sha1">гитхабе</a>.</div>
wwarlockhttp://www.blogger.com/profile/06957450265432764050noreply@blogger.com2tag:blogger.com,1999:blog-2489041700196898836.post-439248955497420492012-01-20T08:56:00.001-08:002012-01-21T02:16:38.225-08:00Cygwin: Starting Gerrit Code Review: Error: Unable to access jarfile<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
<table cellpadding="10px"><tbody width="700px">
<tr><td style="border-right: solid 1px;" width="350px">When you encountered this error then you should search in the file <i>"bin/gerrit.sh"</i> for string</td>
<td width="350px">Если вы встретили такую ошибку, то необходимо в файле <i>"bin/gerrit.sh" </i>найти строку </td></tr>
</tbody></table>
<br />
<pre style="background-color: #272822; color: #f8f8f2; font-family: 'Consolas'; font-size: 10pt;">GERRIT_SITE<span style="color: #f8f8f2;">=</span><span style="color: #e6db74;">`pwd`</span></pre>
<br />
<table cellpadding="10px"><tbody width="700px">
<tr><td style="border-right: solid 1px;" width="350px">and replace it to the next string</td>
<td width="350px">и заменить на следующее</td></tr>
</tbody></table>
<br />
<pre style="background-color: #272822; color: #f8f8f2; font-family: 'Consolas'; font-size: 10pt;">GERRIT_SITE<span style="color: #f8f8f2;">=</span><span style="color: #e6db74;">`cygpath -am \`</span><span style="color: #66d9ef;">pwd</span>\<span style="color: #e6db74;">``</span></pre>
<br />
<br />
<br />
<br />
<br /></div>wwarlockhttp://www.blogger.com/profile/06957450265432764050noreply@blogger.com0tag:blogger.com,1999:blog-2489041700196898836.post-31000206503645968262012-01-12T14:35:00.001-08:002012-05-22T12:13:30.709-07:00MacOSX: Unicode в названиях файлов в HFS<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
<div style="font: 14.0px 'Lucida Grande'; margin: 0.0px 0.0px 0.0px 0.0px;">
<span class="Apple-style-span" style="font-family: inherit; font-size: small;">Недавно, я столкнулся с тем что Git на свежевыкачанном репозитории SVN упорно считает, что некоторые файлы находятся в состоянии Untracked.</span></div>
<div style="font: 14.0px 'Lucida Grande'; margin: 0.0px 0.0px 0.0px 0.0px;">
<span class="Apple-style-span" style="font-family: inherit; font-size: small;">Небольшое расследование вывело на следующее.</span></div>
<div style="font: 14.0px 'Lucida Grande'; margin: 0.0px 0.0px 0.0px 0.0px;">
<span class="Apple-style-span" style="font-family: inherit; font-size: small;"><br /></span></div>
<div style="font: 14.0px 'Lucida Grande'; margin: 0.0px 0.0px 0.0px 0.0px;">
<span class="Apple-style-span" style="font-family: inherit; font-size: small;"><a href="http://ru.wikipedia.org/wiki/%D0%AE%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4">Unicode</a> позволяет, если не совсем избавиться, то минимизировать проблемы национальных кодировок.</span></div>
<div style="font: 14.0px 'Lucida Grande'; margin: 0.0px 0.0px 0.0px 0.0px;">
<span class="Apple-style-span" style="font-family: inherit; font-size: small;">Большое число символов задаётся одним единственным кодом.</span></div>
<div style="font: 14.0px 'Lucida Grande'; margin: 0.0px 0.0px 0.0px 0.0px;">
<span class="Apple-style-span" style="font-family: inherit; font-size: small;">Но также имеется немаленькое количество знаков, которые составляются из пар кодов.</span></div>
<div style="font: 14.0px 'Lucida Grande'; margin: 0.0px 0.0px 0.0px 0.0px;">
<span class="Apple-style-span" style="font-family: inherit; font-size: small;">Наглядный пример, азиатские языки или различные служебные модификаторы вроде признака направления письма справа-налоево или знака ударения.</span></div>
<div style="font: 14.0px 'Lucida Grande'; margin: 0.0px 0.0px 0.0px 0.0px;">
<span class="Apple-style-span" style="font-family: inherit; font-size: small;"><br /></span></div>
<div style="font: 14.0px 'Lucida Grande'; margin: 0.0px 0.0px 0.0px 0.0px;">
<span class="Apple-style-span" style="font-family: inherit; font-size: small;"><a href="http://ru.wikipedia.org/wiki/%D0%9A%D0%B8%D1%80%D0%B8%D0%BB%D0%BB%D0%B8%D1%86%D0%B0_%D0%B2_%D0%AE%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4%D0%B5">Кириллица</a> не стала исключением.</span></div>
<div style="font: 14.0px 'Lucida Grande'; margin: 0.0px 0.0px 0.0px 0.0px;">
<span class="Apple-style-span" style="font-family: inherit; font-size: small;"><br /></span></div>
<div style="font: 14.0px 'Lucida Grande'; margin: 0.0px 0.0px 0.0px 0.0px;">
<span class="Apple-style-span" style="font-family: inherit; font-size: small;">При создании файлов, содержащих в наименовании композитные буквы, HFS сохраняет эти названия в виде двух отдельных знаков.</span></div>
<div style="font: 14.0px 'Lucida Grande'; margin: 0.0px 0.0px 0.0px 0.0px;">
<span class="Apple-style-span" style="font-family: inherit; font-size: small;"><br /></span></div>
<div style="font: 14.0px 'Lucida Grande'; margin: 0.0px 0.0px 0.0px 0.0px;">
<span class="Apple-style-span" style="font-family: inherit; font-size: small;">Для меня это стало сюрпризом, т.к. хотя по спецификации всё верно: буква "Й" является композицией следующих двух:</span></div>
<div style="font: 14.0px 'Lucida Grande'; margin: 0.0px 0.0px 0.0px 0.0px;">
<span style="text-decoration: underline;"><a href="http://www.fileformat.info/info/unicode/char/0438/index.htm"><span class="Apple-style-span" style="font-family: inherit; font-size: small;">www.fileformat.info/info/unicode/char/0438/index.htm</span></a></span></div>
<div style="font: 14.0px 'Lucida Grande'; margin: 0.0px 0.0px 0.0px 0.0px;">
<span style="text-decoration: underline;"><a href="http://www.fileformat.info/info/unicode/char/0306/index.htm"><span class="Apple-style-span" style="font-family: inherit; font-size: small;">www.fileformat.info/info/unicode/char/0306/index.htm</span></a></span></div>
<div style="font: 14.0px 'Lucida Grande'; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 17.0px;">
<span class="Apple-style-span" style="font-family: inherit; font-size: small;"><br /></span></div>
<div style="font: 14.0px 'Lucida Grande'; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 17.0px;">
<span class="Apple-style-span" style="font-family: inherit; font-size: small;">Тем не менее, буква имеет и единичный код</span></div>
<div style="font: 14.0px 'Lucida Grande'; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 17.0px;">
<span style="text-decoration: underline;"><a href="http://www.fileformat.info/info/unicode/char/0439/index.htm"><span class="Apple-style-span" style="font-family: inherit; font-size: small;">www.fileformat.info/info/unicode/char/0439/index.htm</span></a></span></div>
<div style="font: 14.0px 'Lucida Grande'; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 17.0px;">
<span class="Apple-style-span" style="font-family: inherit; font-size: small;"><br /></span></div>
<div style="font: 14.0px 'Lucida Grande'; margin: 0.0px 0.0px 0.0px 0.0px;">
<span class="Apple-style-span" style="font-family: inherit; font-size: small;">Аналогично и для "Ё".</span></div>
<div style="font: 14.0px 'Lucida Grande'; margin: 0.0px 0.0px 0.0px 0.0px;">
<span class="Apple-style-span" style="font-family: inherit; font-size: small;"><br /></span></div>
<div style="font: 14.0px 'Lucida Grande'; margin: 0.0px 0.0px 0.0px 0.0px;">
<span class="Apple-style-span" style="font-family: inherit; font-size: small;">Если невооружённым взглядом такое поведение или сложно или невозможно, то оно прекрасно наблюдается во время SSH-сессии.</span></div>
<div style="font: 14.0px 'Lucida Grande'; margin: 0.0px 0.0px 0.0px 0.0px;">
<span class="Apple-style-span" style="font-family: inherit; font-size: small;"><br /></span></div>
<div style="font: 14.0px 'Lucida Grande'; margin: 0.0px 0.0px 0.0px 0.0px;">
<span class="Apple-style-span" style="font-family: inherit; font-size: small;">Локально из терминала проблему можно воспроизвести если создать какой-либо файл, например:</span></div>
<blockquote class="tr_bq">
<span class="Apple-style-span" style="font-family: inherit;">$ touch Ё-моё.txt</span></blockquote>
<div style="font: 14.0px 'Lucida Grande'; margin: 0.0px 0.0px 0.0px 0.0px;">
<span class="Apple-style-span" style="font-family: inherit; font-size: small;">И попровать затем выполнить автодополение клавишей <b><i>[TAB]</i></b>.</span></div>
<blockquote class="tr_bq">
<span class="Apple-style-span" style="font-family: inherit;">$ ./Ё</span><span class="Apple-style-span" style="font-family: 'Lucida Grande';"><b><i>[TAB]</i></b></span></blockquote>
<div style="font: 14.0px 'Lucida Grande'; margin: 0.0px 0.0px 0.0px 0.0px;">
<span class="Apple-style-span" style="font-family: inherit; font-size: small;">не срабатывает.</span></div>
<div style="font: 14.0px 'Lucida Grande'; margin: 0.0px 0.0px 0.0px 0.0px;">
<span class="Apple-style-span" style="font-family: inherit; font-size: small;"><br /></span></div>
<div style="font: 14.0px 'Lucida Grande'; margin: 0.0px 0.0px 0.0px 0.0px;">
<span class="Apple-style-span" style="font-family: inherit; font-size: small;">Но если ввести</span></div>
<blockquote class="tr_bq">
<span class="Apple-style-span" style="font-family: inherit;">$ ./Е</span><span class="Apple-style-span" style="font-family: 'Lucida Grande';"><b><i>[TAB]</i></b></span></blockquote>
<div style="font: 14.0px 'Lucida Grande'; margin: 0.0px 0.0px 0.0px 0.0px;">
<span class="Apple-style-span" style="font-family: inherit; font-size: small;">то мы увидим нашу многострадальную "Ё".</span></div>
<div style="font: 14.0px 'Lucida Grande'; margin: 0.0px 0.0px 0.0px 0.0px;">
<span class="Apple-style-span" style="font-family: inherit; font-size: small;"><br /></span></div>
<div style="font: 14.0px 'Lucida Grande'; margin: 0.0px 0.0px 0.0px 0.0px;">
<span class="Apple-style-span" style="font-family: inherit; font-size: small;"></span></div>
<div style="font: normal normal normal 14px/normal 'Lucida Grande'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">
<span class="Apple-style-span" style="font-family: inherit; font-size: small;">Некоторые программы (в моём случае GIT и SVN) не могут корректно обработать такую ситуацию.</span></div>
<div style="font: normal normal normal 14px/normal 'Lucida Grande'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">
<span class="Apple-style-span" style="font-family: inherit; font-size: small;">Файл, по-мнению алгоритмов, просто не существует.</span></div>
<div style="font: normal normal normal 14px/normal 'Lucida Grande'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">
<span class="Apple-style-span" style="font-family: inherit; font-size: small;">То есть один и тот же файл в репозитории (попавший туда из других файловых систем) и хранящийся локально (в HFS) считается двумя разными файлами.</span></div>
<div style="font: normal normal normal 14px/normal 'Lucida Grande'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">
<span class="Apple-style-span" style="font-family: inherit; font-size: small;"><br /></span></div>
<span class="Apple-style-span" style="font-family: inherit;">Пока мне не попалось подходящего решения или обходного пути.</span><br />
<div>
<span class="Apple-style-span" style="font-family: inherit;">И, похоже, что необходимо заводить тикет с багой.</span><br />
<span class="Apple-style-span" style="font-family: inherit;"><br /></span><br />
Далее, можно почитать про <a href="http://wwarlock.blogspot.com/2012/05/crossplatform-long-file-name-problem.html">проблему длинных имён в HFS+</a></div>
</div>wwarlockhttp://www.blogger.com/profile/06957450265432764050noreply@blogger.com0tag:blogger.com,1999:blog-2489041700196898836.post-11593176753718577032011-12-13T21:18:00.000-08:002011-12-13T21:43:06.114-08:00Автоматическая выгрузка SMS в Google Docs<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
<div class="p1">
На телефоне скопилось слишком много смс и б<b>о</b>льшая часть из них лежит просто мёртвым грузом.</div>
<div class="p1">
Но иногда мне требуется ретроспектива (по банковской информации, например), поэтому удалять жалко.</div>
<div class="p1">
Я подумал, что было бы неплохо, если бы смс автоматически загружались в GoogleDocs, а на телефоне оставались только относительно недавние сообщения.</div>
<div class="p1">
<br /></div>
<div class="p1">
Поиски в Android Market вывели на две программы.</div>
<div class="p1">
<br /></div>
<a href="https://market.android.com/details?id=com.meeteoric.myarchives">My Archives</a><br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0pbNOQoYK5ykiPFMmeYgaO6MOO13j8nUZDipGQ8hNjmD5amaoVz-lvU8SotZeFlbJsQKnRW_7_mXW_L3JzmcCmFV23XJutxoYoZuIDo-3WSbbmPcNcQp1o-JgdizPbexRqGFU-4sQeJmN/s1600/myarchives.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0pbNOQoYK5ykiPFMmeYgaO6MOO13j8nUZDipGQ8hNjmD5amaoVz-lvU8SotZeFlbJsQKnRW_7_mXW_L3JzmcCmFV23XJutxoYoZuIDo-3WSbbmPcNcQp1o-JgdizPbexRqGFU-4sQeJmN/s400/myarchives.jpg" width="225" /></a></div>
<div>
<br /></div>
и <a href="https://market.android.com/details?id=com.nanoequipment.smsgdoc2">SMS to Google Docs Archiver</a><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6Lg6_K0ZGNIh04y5WNbqSc0sTnfBkzNxYQ06zQTDFqhyphenhyphenkYvdAf-nQBQmF3WFrFtHafAAt1C44b5iBUUz1LKdLmkzj-00qxbfEwQZHILMQn_fbIRlPZA8m36fNP1m24dmFo0dpYQikCnvM/s1600/sms2gdocs.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6Lg6_K0ZGNIh04y5WNbqSc0sTnfBkzNxYQ06zQTDFqhyphenhyphenkYvdAf-nQBQmF3WFrFtHafAAt1C44b5iBUUz1LKdLmkzj-00qxbfEwQZHILMQn_fbIRlPZA8m36fNP1m24dmFo0dpYQikCnvM/s400/sms2gdocs.png" width="266" /></a></div>
<div>
<br /></div>
<div>
Обе программы имеют минималистичный интерфейс и предельно схожий функционал.</div>
<div>
<br /></div>
SMS to Google Docs Archiver мне не понравился разделением смс на входящие и исходящие (хотя для кого-то это возможно и плюс), а так же запросом пароля от почты.<br />
<div>
<br />
<div>
MyArchives же для доступа к документам и авторизации использует Android AccountManager, а в качестве приятного бонуса, по тому же принципу что смс, сохраняет ещё и историю звонков.<br />
Имеется недостаток, MMS не выгружаются, но при этом удаляются. То есть мы их теряем. Но у меня их мало и все бесполезные, потому не жалко.<br />
Если вам ММС необходимы, то либо делайте предварительный бэкап другой программой, либо удаляйте смс вручную.</div>
<div>
<br /></div>
<div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioU7-DfcV2XujNHcPcHtU2B-uAC5z_guUeeJoeh91uklwJjZzUuT9BnoWHTVXrU_TvS6aNeWh4Uz0R2QMMnHf7Wa_1_7kqquBBamZLLyMt-wQbN8v2OlJX2zAaguaDw-OChg_5PI29aQT-/s1600/My_Archives_Collection.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="157" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioU7-DfcV2XujNHcPcHtU2B-uAC5z_guUeeJoeh91uklwJjZzUuT9BnoWHTVXrU_TvS6aNeWh4Uz0R2QMMnHf7Wa_1_7kqquBBamZLLyMt-wQbN8v2OlJX2zAaguaDw-OChg_5PI29aQT-/s640/My_Archives_Collection.png" width="640" /></a></div>
<br />
<br />
<br /></div>
<div>
</div>
</div>
</div>wwarlockhttp://www.blogger.com/profile/06957450265432764050noreply@blogger.com0tag:blogger.com,1999:blog-2489041700196898836.post-47289461752529689162011-11-25T02:12:00.001-08:002011-11-25T02:57:46.035-08:00Как в Git игнорировать изменение прав у файлов<div dir="ltr" style="text-align: left;" trbidi="on">
Работая в среде Cygwin или MSysGit, часто бывает так что права файлов изменяются, либо внешней средой, либо внутренними процессами.<br />
У меня наиболее часто меняется признак исполнимости. И, к сожалению, пока отсутствует время чтобы разобраться в причинах.<br />
<br />
Загадочным, для меня, образом некоторым файлам добавляется +x, некоторым -x.
И Git уже начинает считает эти файлы изменёнными, которые обязательно надо закоммитить.<br />
Т.к. происходит такое довольно часто, то это вызывает раздражение и пустую трату времени на починку с помощью <i>chmod </i>и/или <i>git reset --hard</i>.<br />
<br />
Так, вот, если в вашем проекте не используются системные права, то можно заставить git игнорировать изменение прав у файлов.<br />
<br />
Отключением/включением проверки управляет ключ <i>filemode</i> из секции <i>core</i>.<br />
Его значение необходимо установить в <i>false</i>.<br />
<br />
Либо прямым редактированием .gitconfig:<br />
<pre style="background-color: #eeeeee; color: black; font-family: 'Consolas'; font-size: 10pt;"><span style="color: #ff0080; font-weight: bold;">[</span>core<span style="color: #ff0080; font-weight: bold;">]</span>
filemode <span style="color: #ff0080; font-weight: bold;">=</span> false
</pre>
<br />
Либо командой:
<br />
<pre style="background-color: #eeeeee; color: black; font-family: 'Consolas'; font-size: 10pt;">$ git config core.filemode false
</pre>
<br />
Приятной разработки!</div>wwarlockhttp://www.blogger.com/profile/06957450265432764050noreply@blogger.com0tag:blogger.com,1999:blog-2489041700196898836.post-63514766756521236192011-09-03T05:57:00.002-07:002011-11-25T02:58:09.946-08:00Детерминанты - Тайна Cognos Framework Manager раскрыта<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
Перевод-пересказ <a href="http://www.ironsidegroup.com/2010/02/01/determinants-the-answer-to-a-framework-manager-mystery/">статьи</a> за авторством <span class="Apple-style-span" style="background-color: white; color: #666666; font-family: Arial, Verdana, Tahoma, Helvetica, sans-serif; font-size: 13px; font-style: italic; line-height: 18px;"><span class="author vcard" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 13px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><a class="url fn n" href="http://www.ironsidegroup.com/author/rbaker/" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #666666; font-size: 11px; font-style: normal; letter-spacing: 0.05em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; text-transform: uppercase; vertical-align: baseline;" title="View all posts by Ralph Baker">RALPH BAKER</a></span><span class="meta-sep meta-sep-entry-date" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 13px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span></span>.<br />
<br />
Детерминанты играют ключевую роль в общей производительности и целостности модели. Но, также являются для множества разработчиков одним из самых сбивающих с толку аспектов моделирования. Эта статья постарается положить конец путанице.<br />
<div class="entry-content">
<span id="more-704"></span><br />
Детерминанты используются когда таблица с одной гранулярностью (уровнем детализации) взаимодействует с другой, хранящей данные с другой гранулярностью. Чаще всего, такое бывает в таблицах размерностей, к которым разные таблицы фактов присоединяются к одной размерности, но на разных уровнях. Но это не единственный случай их ипользования, остальные достаточно редки и специфичны.<br />
<h2>
<span class="Apple-style-span" style="font-size: large;"><br /></span></h2>
<h2>
<span class="Apple-style-span" style="font-size: large; font-weight: normal;">Ситуация</span></h2>
Например, имеется размерность времени, с гранулярностью до дня. Если все факты присоединяются к самому детальному уровню Day, тогда детерминанты не нужны. Но, как показывает практика, идеал бывает редко достижим. По множеству разных причин, факты в таблицах частенько агрегированы или хранят данные на разных уровня гранулированности.<br />
<h2>
<strong><span class="Apple-style-span" style="font-size: large;"><br /></span></strong></h2>
<h2>
<span class="Apple-style-span" style="font-size: large; font-weight: normal;">Западня</span></h2>
Неприятности всплывают вместе с желанием впихнуть невпихуемое AKA присоединиться к размерности времени не по самому нижнему уровню. Рассмотрим таблицу фактов с месячными прогнозами (monthly forecast fact table); с детализацией "одна строка - один месяц". Связь через month_id будет каждый раз, в зависимости от месяца, возвращать от 28 до 31 записи, и таким образом, портить расчёты и настроение. Детерминанты решают эту проблему.<br />
<h2>
<strong><span class="Apple-style-span" style="font-size: large;"><br /></span></strong></h2>
<h2>
<span class="Apple-style-span" style="font-size: large; font-weight: normal;">Запрос SQL</span></h2>
Часто, при моделировании, полезно думать о том, какой код SQL хотелось бы получить на выходе. Без детерминантов день рожденья на праздник непохож, и неправильный SQL выглядит примерно так:<br />
<span style="color: #3366ff;"><strong>SELECT<br />F.FORCAST_VALUE,<br />D.MONTH_ID,<br />D.MONTH_NAME<br />FROM SALES_FORECAST F INNER JOIN DATE_DIM D ON<br />F.MONTH_ID = D.MONTH_ID</strong></span><br />
Этот код, на каждую запись из прогноза, получит примерно в 30 раз больше записей, чем нужно. Математические функции, вроде Sum и Count, вернут неверный результат. Правильный же запрос, должен сначала вытащить все уникальные месяцы, каждого по одной штуке, и ТОЛЬКО ПОСЛЕ ЭТОГО присоединить факт:<br />
<span style="color: #3366ff;"><strong>SELECT<br />F.FORCAST_VALUE,<br />D1.MONTH_ID,<br />D1.MONTH_NAME<br />FROM SALES_FORECAST F INNER JOIN<br />( SELECT DISTINCT<br />D.MONTH_ID,<br />D.MONTH_NAME<br />FROM DATE_DIM D ) AS D1<br />ON F.MONTH_ID = D1.MONTH_ID</strong></span><br />
Как показано выше, трюк заключается в понимании какие колонки в размерности относятся к month_id, и потому уникальны в пределах ключа. Как раз в этом и заключается работа детерминантов.<br />
<h2>
<span class="Apple-style-span" style="font-size: large;"><br /></span></h2>
<h2>
<span class="Apple-style-span" style="font-size: large; font-weight: normal;">
Разоблачение тайны Framework Manager</span></h2>
Следуя лучшим практикам Cognos, детерминанты необходимо указывать в слое модели, где происходит связывание таблиц.<br />
Ниже приведена размерность времени с 4 уровнями: Year, Quarter, Month и day.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjqS5YjSg-fCaZMhYT71vd6u5XML2dhinUQ3FsfjdL1ZUdUMu0SHQ60dxKBcrD-im2-0WL4mcVJyZF5rTs5ovjpv2_hoTgngWmxtH1V6B7zo0LQjOqOCqS_AzC3Vmm_A79Lm53PeJjZDG-/s1600/1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjqS5YjSg-fCaZMhYT71vd6u5XML2dhinUQ3FsfjdL1ZUdUMu0SHQ60dxKBcrD-im2-0WL4mcVJyZF5rTs5ovjpv2_hoTgngWmxtH1V6B7zo0LQjOqOCqS_AzC3Vmm_A79Lm53PeJjZDG-/s1600/1.jpg" /></a></div>
<br />
<br />
<br />
<br />
Это означает, что, в зависимости от гранулированности таблиц фактов, представленных в модели, в тематическом запросе можно определить до 4-х детерминантов. Первые три уровня: Year, Quarter, Month должны быть группирующими, т.к. не описывают уникальную строку в таблице; и установка флага "group-by" объясняет Cognos'у, что данные по этому уровню необходимо "схлопнуть" (оставить только одно значение). Другими словами, здесь описываются правила для формирования секции "group by" в запросе SQL (такого как Год или Месяц). Уровень Day - это конечный (Leaf) уровень детализации. С целью однозначного определения любых строк внутри размерности, необходимо установить флаг “Uniquely Identified”. Детерминантов "group by" может быть множество, но детерминант по уникальному ключу, как правило, только один единственный. Детерминант "uniquely identified" по определению содержит все неключевые столбцы как атрибуты, и автоматически создаётся во время импорта таблицы, если получается его обнаружить (т.е. в таблице БД имеется первичный ключ или индексы).<br />
Секция <span style="text-decoration: underline;">Key</span><strong> </strong>содержит колонки, которые однозначно определяют уровень. В идеале, это одна колонка, но иногда требуется больше; например, если Год и Месяц (1-12) находятся в отдельных колонках. Итак, ключ - это любые колонки, которые нужны чтобы однозначно обозначить уровень.<br />
Исходя из размышлений выше, настройки будут выглядеть следующим образом:<br />
<br />
<div style="text-align: center;">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCk_3hCc5kWMZYcmYSJGo5S7GMJsinzE94ug8WN-i89S0q7p7NApGYSO0J6-rXk-ZMXtRp0_Q0qH9GQr1socPNQDcrjvh3xfyoOU38fas6keYcyCeOcIM_ZLJl66rEpDQH0ACzag_LZMUs/s1600/2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCk_3hCc5kWMZYcmYSJGo5S7GMJsinzE94ug8WN-i89S0q7p7NApGYSO0J6-rXk-ZMXtRp0_Q0qH9GQr1socPNQDcrjvh3xfyoOU38fas6keYcyCeOcIM_ZLJl66rEpDQH0ACzag_LZMUs/s1600/2.jpg" /></a></div>
</div>
Секция <span style="text-decoration: underline;">Attributes</span> описывает все остальные колонки, которые относятся к уровню. Например на уровне month_id, такими являются: название месяца, дата начала месяца, количество дней в месяце (month name, month starting date, number of days). И, очевидно, что здесь отсутствуют элементы с более низкого уровня, такие как Дата или День недели (date, day-of-week).<br />
Вообще говоря, порядок расположения детерминантов не соотносится с уровнями измерения. Однако, для понимания как строится запрос SQL, очень важно знать, что поиск колонок ведётся сверху-вниз. Если в отчёте используется Год, Квартал и Месяц, то группировка будет сделана по колонкам Year-key, Quarter-key и Month-key. Но если для отчёта нужны только Год и Месяц (без Квартала), то в секции "group by" ключ Quarter-key будет пропущен.<br />
<h2>
<span class="Apple-style-span" style="font-size: large;"><br /></span></h2>
<h2>
<span class="Apple-style-span" style="font-size: large; font-weight: normal;">
Сколько уровней требуется?</span></h2>
Насколько необходимы все четыре уровня детерминантов? Имейте в виду, что детерминанты используются для присоединения ко всем уровням измерения, кроме самого нижнего. В примере выше, присоединяемся на уровне месяц (по ключу month_id). Пока отсутствуют дополнительные связи на уровнях года и квартала, строго говоря, указывать эти детерминанты необходимости нет. Помните, что год и квартал однозначно определяются ключом month_id, поэтому их необходимо добавить на уровень месяца как атрибуты:<br />
<br />
<div style="text-align: center;">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilkh9pFtiQrcgeDQ1NkpZyVTdFVyFbRutVoabK0PcTJXjXXymuirh7KHwE00XDIVP7oeQoO2A9FepHEra7JcWIUAfAam9ohk1XUAsC7f07lpLhSuZZK9fNQMfOD1u9S7z306GtXH0onZDB/s1600/3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilkh9pFtiQrcgeDQ1NkpZyVTdFVyFbRutVoabK0PcTJXjXXymuirh7KHwE00XDIVP7oeQoO2A9FepHEra7JcWIUAfAam9ohk1XUAsC7f07lpLhSuZZK9fNQMfOD1u9S7z306GtXH0onZDB/s1600/3.jpg" /></a></div>
</div>
<h2>
<span class="Apple-style-span" style="font-size: large;"><br /></span></h2>
<h2>
<span class="Apple-style-span" style="font-size: large; font-weight: normal;">Заключение</span></h2>
Следуя этим простым правилам, Cognos создаст следующий запрос SQL. Выделенный кусок кода создан на основе настроек детерминантов. Обратите внимание, каким образом "схлапывается" Month_ID; для обеспечения уникальности значения уровня используется функция <strong>min</strong>. Cognos-параноик и недостотачно доверяет чистоте входящих данных, чтобы делать просто SELECT DISTINCT. Второе выражение 'group by' это обычное агрегирование, необходимое для отчёта. Так как связь теперь происходит корректно (каждый факт соединён только с одной записью размерности), в отчёт попадают правильные цифры.<br />
<br />
<div style="text-align: center;">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDCixTOgDbLsp3D4TxjIHBbV4giSoyDtld180AAKepkxdzcxp3cgXwtRJtHv2uCZQUFhoUYaTiN3S7eTSjjkC_6AauyW-sNiYHbks-0YopoeoT50GpekiP_u_1fuUcVohBBonftuUV1Kih/s1600/4.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDCixTOgDbLsp3D4TxjIHBbV4giSoyDtld180AAKepkxdzcxp3cgXwtRJtHv2uCZQUFhoUYaTiN3S7eTSjjkC_6AauyW-sNiYHbks-0YopoeoT50GpekiP_u_1fuUcVohBBonftuUV1Kih/s1600/4.jpg" /></a></div>
<br />
<br />
<div style="text-align: left;">
<br /></div>
</div>
</div>
</div>wwarlockhttp://www.blogger.com/profile/06957450265432764050noreply@blogger.com1tag:blogger.com,1999:blog-2489041700196898836.post-1713522548013141272011-09-03T05:19:00.003-07:002011-09-03T05:29:24.312-07:00Небольшой FAQ по поручительству и ипотеке Сбербанка России<div dir="ltr" style="text-align: left;" trbidi="on">
Внимание!<br />
Я не являюсь представителем банка, ответы на вопросы не являются официальными ответами банка и не являются истиной в последней инстанции.<br />
Я не несу ответственности за любые убытки, которые вы можете понести на основе материала ниже.<br />
<br />
Эти вопросы возникали у меня постепенно, и мне пришлось тратить время чтобы дозвониться до отделения, чтобы их выяснить.<br />
Наверняка эти вопросы задают сотрудникам банка не один раз.<br />
Так не проще было вывесить их где-нибудь вместе с ответами на видном месте и не тратить ни время клиентов, ни время сотрудников?<br />
Кстати, по интонации последних, особенно чувствовалось, что эти вопросы они считают идиотскими, а людей, которые их задают, идиотами.<br />
<br />
1. Как статус поручительства влияет на жизнь?<br />
2. Что если поручителей больше одного?<br />
3. Что если поручитель сам захочет взять кредит?<br />
4. Когда снимается статус поручительства?<br />
5. Когда требуется поручительство?<br />
6. Могут ли пенсионеры быть поручителями?<br />
7. Могут ли в качестве поручителя выступать индивидуальные предприниматели (ИП)?<br />
8. Что если застройщик предлагает в качестве бонуса нежилое помещение?<br />
9. Имеется одобрение на ипотеку приобретение квартиры на вторичном рынке недвижимости. Возможно ли, в таком случае, приобрести квартиру в новостройке?<br />
<br />
----------------------------------------------------------------------------<br />
<br />
1. Как статус поручительства влияет на жизнь?<br />
<br />
Ответ: Пока заёмщик платит, то никак. Но если заёмщик платить перестаёт, то поручитель отвечает перед банком в полном объёме. Так же есть ограничения, если поручитель сам захочет взять кредит (см. ниже).<br />
<br />
---------------------<br />
<br />
2. Что если поручителей больше одного?<br />
<br />
Ответ: Оба поручителя "делят" обязательства по долгу на пополам.<br />
Смотрите пример в пункте 3.<br />
<br />
---------------------<br />
<br />
3. Что если поручитель сам захочет взять кредит?<br />
<br />
Ответ: Максимальная сумма кредита, которая рассчитывается из дохода, будет меньше, т.к. из дохода поручителя отнимается сумма его обязательств по поручительству, как если бы он сам платил эту сумму.<br />
К примеру, заёмщик платит 20000 в месяц, доход поручителя 50000р. <br />
Догда максимальная сумма будет рассчитываться из дохода 30 т.р (50 - 20).<br />
Если поручителей два, то рассматриваемый поручитель предъявяляет доход как 40т.р (50 - 20/2).<br />
Точные рассчёты до копееек посчитают в отделении банка, но идея такая.<br />
<br />
---------------------<br />
<br />
4. Когда снимается статус поручительства?<br />
<br />
Ответ: Как правило, когда квартира переходит в собственность и появляется возможность оформить страховку и залог.<br />
Если поручителей больше одного, то бывает, что выводят не всех.<br />
<br />
---------------------<br />
<br />
5. Когда требуется поручительство?<br />
<br />
Ответ: Всё зависит от того как налажены у банка связи с застройщиком, насколько банк ему доверяет.<br />
В общем случае, действует такое правило, если дом готов меньше чем на 70%, то поручители требуются, если больше, то нет.<br />
Есть небольшой, но каверзный нюанс: если одобрение было получено в одном отделении, а стройка аккредитована в другом, то есть риск, что понадобиться подавать документы заново в то отделение, которое аккредитовало стройку.<br />
Например, я подавал документы в Царицынском отделении и мне было отказано в приобретении квартир в новостройках Подольска, т.к. все стройки были аккредитованы только Подольским отделением банка и с Царицынским они "не дружат".<br />
Уж не знаю почему, но, опять же, это чувствовалось по интонации, когда я в одном отделении задавал вопросы про другое.<br />
Вообще, за годы общения с банком, у меня сложилось впечатление что это не единая монолитная структура, а множество мелких феодальных анклавов, работающих по франшизе, примерно как Макдональдс.<br />
<br />
---------------------<br />
<br />
6. Могут ли пенсионеры быть поручителями?<br />
<br />
Ответ: могут, если пенсия уже оформлена и возраст поручителя до 75 лет (для мужчин).<br />
Для женщин как-то не подумал спросить, поэтому, к сожалению, не могу сказать.<br />
Как только уточню этот вопрос, то обновлю здесь.<br />
<br />
---------------------<br />
<br />
7. Могут ли в качестве поручителя выступать индивидуальные предприниматели (ИП)?<br />
<br />
Ответ: могут, если занимаются своим бизнесом больше года и подавали в этом году налоговую декларацию. Но лучше, если деклараций подавались регулярно без пропусков на протяжении всей деятельности.<br />
<br />
---------------------<br />
<br />
8. Что если застройщик предлагает в качестве бонуса нежилое помещение?<br />
<br />
Ответ: Банк, как правило, кредитует только жилую недвижимость. На нежилое помещение, скорее всего, потребуется дополнительная сумма наличными.<br />
Впрочем застройщики часто предоставляют рассрочки, так что есть возможность подкопить и не занимать у друзей.<br />
Наличие нежилого помещения следует отразить в письме бронирования квартиры банку от застройщика.<br />
<br />
<br />
---------------------<br />
<div>
<br /></div>
<br />
9. Имеется одобрение на ипотеку приобретение квартиры на вторичном рынке недвижимости. Возможно ли, в таком случае, приобрести квартиру в новостройке? И, наоборот.<br />
<br />
Ответ: Да, это возможно. Необходимо написать заявление в свободной форме. После этого, ваше дело будет рассматриваться в кредитной комиссии несколько дней. С большой вероятностью, решение будет положительным.</div>
wwarlockhttp://www.blogger.com/profile/06957450265432764050noreply@blogger.com0tag:blogger.com,1999:blog-2489041700196898836.post-22746158471942996552011-07-30T01:53:00.001-07:002012-06-18T04:42:19.660-07:00Регистрация в Apple developer Program с помощью виртуальной карты<div dir="ltr" style="text-align: left;" trbidi="on">
При <span style="background-color: white;">регистрации в Apple developer Program </span><span style="background-color: white;">на каком-то шаге нам сообщают: "извините, Вы </span><span style="background-color: white;">не из тех стран, жителям которых мы не желаем геморроя и потому разрешаем платить карточкой через онлайн</span><span style="background-color: white;">".</span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgv-LLqAP0sWGMkMnawpv_4l61PfvN82r7XhupKCgp8SVb_wj5ICt5uDlUo8y2QBKNFHVDIbrPDjjF4eOHsx4Zgjv0dTjYwZ6W4GCN-1qDeAUiF7M9GTLNl2yGLNRejJ2vPvlirF289-C9Q/s1600/purchaseScreen.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="418" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgv-LLqAP0sWGMkMnawpv_4l61PfvN82r7XhupKCgp8SVb_wj5ICt5uDlUo8y2QBKNFHVDIbrPDjjF4eOHsx4Zgjv0dTjYwZ6W4GCN-1qDeAUiF7M9GTLNl2yGLNRejJ2vPvlirF289-C9Q/s640/purchaseScreen.png" width="640" /></a></div>
<span style="background-color: white;">Отсюда, возникают пара проблем.</span><br />
<br />
Первая, необходимо заполнить <a href="https://devimages.apple.com.edgekey.net/programs/purchaseform.pdf" target="_blank">форму</a> и отправить её по факсу.<br />
В век интернета надо найти, некий аппарат эпохи динозавров, многие, из современного поколения, даже названия которому не знают.<br />
Ну ладно, в офисах где-то ещё имеется. Но не всем так везёт.<br />
Необходимым условием является, чтобы на этом аппарате были разрешены международные звонки.<br />
Практически нереальная комбинация, во-всяком случае, в окружающей меня реальности.<br />
<br />
Вторая проблема, в этой форме в открытом виде необходимо передать реквизиты карточки, включая номер, дату истечения и код CVV.<br />
Заходи кто хочешь! Бери сколько унесёшь! Я сегодня добрый, э-э-х гуляй, душа праздника просит...<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJFVOEPYkoTPUF7E0UXLOZyFFwu8mxs-pnmQBhCwvvDZz5HHf0ldZInnwDsLewyRB9F48M1UxSUVkuh0ODdADR-1T7chCgOTsme4iSXnoZVodp5lFoc1KunGbRvKZIh0EXFjhTi8I48jBy/s1600/purchaseForm.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJFVOEPYkoTPUF7E0UXLOZyFFwu8mxs-pnmQBhCwvvDZz5HHf0ldZInnwDsLewyRB9F48M1UxSUVkuh0ODdADR-1T7chCgOTsme4iSXnoZVodp5lFoc1KunGbRvKZIh0EXFjhTi8I48jBy/s640/purchaseForm.png" width="508" /></a></div>
<span style="background-color: white;">Итак, что я сделал.</span><br />
С некоторых пор, Яндекс, совместно с Интеркоммерц банком предлагают услугу "<a href="https://money.yandex.ru/card/virtual/about.xml">Виртуальная карта MasterCard Prepaid</a>".<br />
Через Евросеть, т.к. у них без процентов, пополняем Яндекс кошелёк на 99 долларов + небольшой запас, т.к. существует комиссия за конверсию из рублей в баксы и плюс 1.99 от номинала.<br />
<br />
Идём на <a href="https://money.yandex.ru/card/virtual/buy.xml?from=imainvirtcard">страницу покупки карты</a>. Если вы залогинены, то увидите следующую картинку.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhK6smhRzngI-ti7IC0iFHTT6erjsvwrImkqifIFSfwiTJ-S6RNFI0HSZQNaszbuMv_i2p6dZGQMEY0Cyeu5aSG-C4c-lkWqRXFi2eCr1pRv1jRVN_3qYePZL-9AmXzLygFfLV60Q-63CV/s1600/money.yandex.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="459" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhK6smhRzngI-ti7IC0iFHTT6erjsvwrImkqifIFSfwiTJ-S6RNFI0HSZQNaszbuMv_i2p6dZGQMEY0Cyeu5aSG-C4c-lkWqRXFi2eCr1pRv1jRVN_3qYePZL-9AmXzLygFfLV60Q-63CV/s640/money.yandex.jpg" width="640" /></a></div>
<br />
Соглашаемся с условиями и нажимаем "Купить карту".<br />
Опция "уведомление по смс", в данном случае, нужна только собственного для успокоения, чтобы знать когда с карты снимут деньги. Никаких данных для <span style="background-color: white;">подтверждения транзакции </span><span style="background-color: white;">не приходило.</span><br />
<br />
Теперь распечатанную форму заполняем реквизитами вновь полученной виртуальной карты.<br />
Т.к. карта неименная, то в имени и фамилии может быть написано, хоть Питэр с Марса.<br />
Но с Apple лучше так не шутить, пишите своё настоящее имя по-латински.<br />
Оптимальный вариант - переписать из загран-паспорта. В любом случае, имя и фамилия должны быть похожи (но не обязательно совпадать до буквы) на те, что вы указываете в качестве разработчика.<br />
Моя фамилия, например, может быть написана в пяти вариациях, и официальный вариант из загран-паспорта не совпадает с тем, что я привык писать в различных формах.<br />
В этот раз я вписал вариант фамилии, которую нашёл в закоулках настроек Яндекс.Денег (кстати, я полагаю, что компании стоило бы предлагать его по умолчанию в момент заказа карты).<br />
<br />
Закончили с реквизитами карты?<br />
<br />
Не забудьте поставить свою роспись.<br />
<br />
У меня сканера не оказалось, поэтому сфотографировал заполненную форму на фотоаппарат.<br />
Сконвертировал в PDF.<br />
<br />
И отправил через сервис бесплатных факсов GotFreeFax.com.<br />
<br />
Примерно через неделю пришло уведомление, мол всё хорошо, но где деньги чувак?<br />
Типа, твоё желание быть в нашей команде мы видим, а денег нет. Одного лишь желания мало.<br />
<br />
На этот раз я отправил два факса через GotFreeFax.com и два через FaxZero.com.<br />
Это были выходные.<br />
Но факсовая спам-атака сработала. Через пару дней в мобиле появилась смс, что карту обчистили на 99 баксов.<br />
А ещё через 5 часов пришло письмо: "Дорогой ты наш, сэр (не такой дорогой как разработчики под большой Мак, платящие 200 баксов за год, но уж какой есть), спасибо и велком в наш <a href="http://itunesconnect.apple.com/">чудный дивный мир</a>".</div>wwarlockhttp://www.blogger.com/profile/06957450265432764050noreply@blogger.com0tag:blogger.com,1999:blog-2489041700196898836.post-53506900492653979232011-06-07T05:35:00.001-07:002011-06-26T20:59:38.207-07:00Как в Git вывести файл из под версионного контроляЧто делать, если вы когда-то взяли файл под версионный контроль, а теперь поняли что он не нужен?<br />
И что делать, если файл, который находится под контролем вы меняете локально, и эти изменения нельзя коммитить?<br />
В обоих случаях .gitignore не работает. А действовать надо так:<br />
<pre style="color:#000000; background-color:#eeeeee; font-size:10pt; font-family:'Consolas';">$ git <span style="color:#0080c0">rm</span> <span style="color:#ff0080; font-weight:bold">--</span>cached <span style="color:#ff0080; font-weight:bold"><</span><span style="color:#0080c0">file</span><span style="color:#ff0080; font-weight:bold">></span>
</pre>Данная команда выведет файл из под версионного контроля при следующем коммите, но оставит его живым в рабочем каталоге.wwarlockhttp://www.blogger.com/profile/06957450265432764050noreply@blogger.com0tag:blogger.com,1999:blog-2489041700196898836.post-88594993264337401822011-04-25T11:49:00.001-07:002011-04-28T03:40:04.683-07:00Redmine готовый к развёртыванию на серверах приложений<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXeImdq9mABEl8ONxXEvsnurJ2pfgghgse6MnZjCXzBj0gCqQsFlYbw5kurcC4DK4Tlb2a1VeXMIl4O8WbCT1A0VqyHwrNUyhysawA_SUJ0Ee3HHu6ICi9pas30INz75zaJi_ZCgyYezJH/s1600/redmine_logo_v1.png" imageanchor="1" style="margin-left:1em; margin-right:1em"><img border="0" height="133" width="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXeImdq9mABEl8ONxXEvsnurJ2pfgghgse6MnZjCXzBj0gCqQsFlYbw5kurcC4DK4Tlb2a1VeXMIl4O8WbCT1A0VqyHwrNUyhysawA_SUJ0Ee3HHu6ICi9pas30INz75zaJi_ZCgyYezJH/s400/redmine_logo_v1.png" /></a></div>Если у вас есть необходимость развернуть Redmine на сервере приложений типа Tomcat, то у вас есть такие пути:<br />
- скачать исходники, обложиться мануалами, и потратить день-два, чтобы решить все траблы;<br />
- или скачать предлагаемый файл WAR, подправить пару настроек, и получить рабочую систему в течение 15 минут.<br />
<br />
Итак, качаем <a href="https://github.com/wwarlock/redmine-war">файл</a> (за основу был взят Redmine 1.1.2-devel).<br />
<br />
Внутри находиться схема с таблицами, которую необходимо воссоздать в базе.<br />
<pre style="color:#000000; background-color:#eeeeee; font-size:10pt; font-family:'Consolas';">redmine<span style="color:#ff0080; font-weight:bold">-</span>VERSION.war<span style="color:#ff00ff; font-weight:bold">\</span>WEB<span style="color:#ff0080; font-weight:bold">-</span>INF<span style="color:#ff00ff; font-weight:bold">\</span>config<span style="color:#ff00ff; font-weight:bold">\</span>redmine_default_data.sql
</pre>Реквизиты для первого входа стандартные для Redmine: admin/admin.<br />
Сейчас схема только на русском, но планируется и английская версия.<br />
<br />
Теперь, необходимо указать реквизиты для соединения.<br />
<pre style="color:#000000; background-color:#eeeeee; font-size:10pt; font-family:'Consolas';">redmine<span style="color:#ff0080; font-weight:bold">-</span>VERSION.war<span style="color:#ff00ff; font-weight:bold">\</span>WEB<span style="color:#ff0080; font-weight:bold">-</span>INF<span style="color:#ff00ff; font-weight:bold">\</span>config<span style="color:#ff00ff; font-weight:bold">\</span>database.yml
</pre><pre style="color:#000000; background-color:#eeeeee; font-size:10pt; font-family:'Consolas';"><span style="color:#f27900"># MySQL (default setup).</span>
production<span style="color:#ff0080; font-weight:bold">:</span>
adapter<span style="color:#ff0080; font-weight:bold">:</span> jdbc
url<span style="color:#ff0080; font-weight:bold">:</span> jdbc<span style="color:#0080c0">:mysql</span><span style="color:#ff0080; font-weight:bold">:</span><span style="color:#0080c0">//</span>YOURSERVER<span style="color:#ff0080; font-weight:bold">.</span>com<span style="color:#0080c0">:3306</span><span style="color:#ff0080; font-weight:bold">/</span>DBNAME
driver<span style="color:#ff0080; font-weight:bold">:</span> com<span style="color:#ff0080; font-weight:bold">.</span>mysql<span style="color:#ff0080; font-weight:bold">.</span>jdbc<span style="color:#ff0080; font-weight:bold">.</span>Driver
username<span style="color:#ff0080; font-weight:bold">:</span> YOURNAME
password<span style="color:#ff0080; font-weight:bold">:</span> YOURPASSWORD
encoding<span style="color:#ff0080; font-weight:bold">:</span> utf8
</pre>Последний по списку, но не по значимости, шаг. Настройка безопасности.<br />
Необходимо сгенерировать уникальный ключ.<br />
<pre style="color:#000000; background-color:#eeeeee; font-size:10pt; font-family:'Consolas';">redmine<span style="color:#ff0080; font-weight:bold">-</span>VERSION.war<span style="color:#ff00ff; font-weight:bold">\</span>WEB<span style="color:#ff0080; font-weight:bold">-</span>INF<span style="color:#ff00ff; font-weight:bold">\</span>config<span style="color:#ff00ff; font-weight:bold">\</span>initializers<span style="color:#ff00ff; font-weight:bold">\</span>session_store.rb
</pre><pre style="color:#000000; background-color:#eeeeee; font-size:10pt; font-family:'Consolas';"><span style="color:#f27900"># This file was generated by 'rake config/initializers/session_store.rb',</span>
<span style="color:#f27900"># and should not be made visible to public.</span>
<span style="color:#f27900"># If you have a load-balancing Redmine cluster, you will need to use the</span>
<span style="color:#f27900"># same version of this file on each machine. And be sure to restart your</span>
<span style="color:#f27900"># server when you modify this file.</span>
<span style="color:#f27900"># Your secret key for verifying cookie session data integrity. If you</span>
<span style="color:#f27900"># change this key, all old sessions will become invalid! Make sure the</span>
<span style="color:#f27900"># secret is at least 30 characters and all random, no regular words or</span>
<span style="color:#f27900"># you'll be exposed to dictionary attacks.</span>
ActionController<span style="color:#ff0080; font-weight:bold">:</span><span style="color:#0080c0">:Base</span><span style="color:#ff0080; font-weight:bold">.</span>session <span style="color:#ff0080; font-weight:bold">= {</span>
<span style="color:#0080c0">:key</span> <span style="color:#ff0080; font-weight:bold">=></span> <span style="color:#a68500">'_redmine_session'</span><span style="color:#ff0080; font-weight:bold">,</span>
<span style="color:#f27900">#</span>
<span style="color:#f27900"># Uncomment and edit the :session_path below if are hosting your Redmine</span>
<span style="color:#f27900"># at a suburi and don't want the top level path to access the cookies</span>
<span style="color:#f27900">#</span>
<span style="color:#f27900"># See: http://www.redmine.org/issues/3968</span>
<span style="color:#f27900">#</span>
<span style="color:#f27900"># :session_path => '/url_path_to/your/redmine/',</span>
<span style="color:#0080c0">:secret</span> <span style="color:#ff0080; font-weight:bold">=></span> <span style="color:#a68500">'30e7cb1c1f4342cf1a3c42023a4d8ebf363792f63e711e3682b0a69ec42defd8d936c3a8aa556b40'</span>
<span style="color:#ff0080; font-weight:bold">}</span>
</pre><br />
Можно использовать <a href="http://www.random.org/cgi-bin/randbyte?nbytes=40&format=h">онлайновый HEX-генератор</a> (только уберите пробелы и переносы).<br />
<br />
И на этом всё, вы готовы к развёртыванию в сервере приложений.<br />
Я проверял этот файл в Tomcat 6.0.26 на локальной машине, и в сервисе Cloudbees.com.<br />
Везде работает великолепно.<br />
Выше были перечислены только минимально-необходимые для успешного старта шаги. Теперь, когда и у вас развёртывание завершено, приступайте настройке остальных параметров, если есть такая необходимость:<br />
<pre style="color:#000000; background-color:#eeeeee; font-size:10pt; font-family:'Consolas';">redmine<span style="color:#ff0080; font-weight:bold">-</span>VERSION.war<span style="color:#ff00ff; font-weight:bold">\</span>WEB<span style="color:#ff0080; font-weight:bold">-</span>INF<span style="color:#ff00ff; font-weight:bold">\</span>config
</pre>Надеюсь кому-то это окажется полезным и сэкономит время.wwarlockhttp://www.blogger.com/profile/06957450265432764050noreply@blogger.com0tag:blogger.com,1999:blog-2489041700196898836.post-200162933692009592011-04-25T11:49:00.000-07:002011-04-26T07:52:51.828-07:00Redmine 1.1.2 devel deploy ready WAR fileIf you want to deploy Redmine to servlet container such as Tomcat, then you have two ways:<br />
- download redmine source codes, read a lot of instructions, and spent about day or two to resolve all conflicts;<br />
- or you just download my war-file, edit few settings, and you're done in 15 minutes.<br />
<br />
Here's the <a href="https://github.com/wwarlock/redmine-war">file</a>.<br />
<br />
In the war-file you should find initial table scheme and run it on your database.<br />
<i>redmine-VERSION.war\WEB-INF\config\redmine_default_data.sql</i><br />
<br />
Sorry guys, in this file it is on Russian, but I can make in English one, if you request me.<br />
<br />
After that you should correct<br />
<i>redmine-VERSION.war\WEB-INF\config\database.yml</i><br />
<br />
And the last step but not least is security. You should generate your own unique secret key.<br />
<i>redmine-VERSION.war\WEB-INF\config\initializers\session_store.rb</i><br />
<br />
<pre style="color:#dcdccc; background-color:#1f1f1f; font-size:10pt; font-family:'Consolas';"><span style="color:#7f9f7f; font-style:italic"># This file was generated by 'rake config/initializers/session_store.rb',</span>
<span style="color:#7f9f7f; font-style:italic"># and should not be made visible to public.</span>
<span style="color:#7f9f7f; font-style:italic"># If you have a load-balancing Redmine cluster, you will need to use the</span>
<span style="color:#7f9f7f; font-style:italic"># same version of this file on each machine. And be sure to restart your</span>
<span style="color:#7f9f7f; font-style:italic"># server when you modify this file.</span>
<span style="color:#7f9f7f; font-style:italic"># Your secret key for verifying cookie session data integrity. If you</span>
<span style="color:#7f9f7f; font-style:italic"># change this key, all old sessions will become invalid! Make sure the</span>
<span style="color:#7f9f7f; font-style:italic"># secret is at least 30 characters and all random, no regular words or</span>
<span style="color:#7f9f7f; font-style:italic"># you'll be exposed to dictionary attacks.</span>
ActionController<span style="color:#dcdccc">:</span><span style="color:#aae3b2">:Base</span><span style="color:#dcdccc">.</span>session <span style="color:#dcdccc">= {</span>
<span style="color:#aae3b2">:key</span> <span style="color:#dcdccc">=></span> <span style="color:#cc9393">'_redmine_session'</span><span style="color:#dcdccc">,</span>
<span style="color:#7f9f7f; font-style:italic">#</span>
<span style="color:#7f9f7f; font-style:italic"># Uncomment and edit the :session_path below if are hosting your Redmine</span>
<span style="color:#7f9f7f; font-style:italic"># at a suburi and don't want the top level path to access the cookies</span>
<span style="color:#7f9f7f; font-style:italic">#</span>
<span style="color:#7f9f7f; font-style:italic"># See: http://www.redmine.org/issues/3968</span>
<span style="color:#7f9f7f; font-style:italic">#</span>
<span style="color:#7f9f7f; font-style:italic"># :session_path => '/url_path_to/your/redmine/',</span>
<span style="color:#aae3b2">:secret</span> <span style="color:#dcdccc">=></span> <span style="color:#cc9393">'116315a0b6f594fa95bf163fce376b36de6bc53936327c4577f3f64f8e4c15af60eda37e4ff9562d'</span>
<span style="color:#dcdccc">}</span>
</pre><br />
You may use this <a href="http://www.random.org/cgi-bin/randbyte?nbytes=40&format=h">online hex generator</a>, for example (just remove the spaces).<br />
<br />
And that's all, you're ready to deploy.<br />
I've tested this file on the local machine and on Cloudbees.com service.<br />
It works just fine on both.wwarlockhttp://www.blogger.com/profile/06957450265432764050noreply@blogger.com0tag:blogger.com,1999:blog-2489041700196898836.post-34522579097727755722011-04-10T14:21:00.000-07:002011-04-10T14:22:48.894-07:00Удалённая проверка источника питания на MacBookБывают разные случаи, когда полезно проверить подключен ли ноутбук к электросети.<br />
Первый вариант, через VNC или Apple Remote Desktop загрузиться и посмотреть состояние в графическом режиме.<br />
Но есть способ автоматизировать процесс.<br />
В комплекте с MacOS идёт консольная утилита <i>system_profiler</i>.<br />
Если её запустить просто так, то будет выдана куча системной информации.<br />
Чтобы выделить только нужное, существует набор фильтров.<br />
С полным списком можно ознакомиться командой:<br />
<blockquote>$ system_profiler -listDataTypes<br />
Available Datatypes:<br />
SPHardwareDataType<br />
SPNetworkDataType<br />
SPSoftwareDataType<br />
SPParallelATADataType<br />
SPAudioDataType<br />
SPBluetoothDataType<br />
SPCardReaderDataType<br />
SPDiagnosticsDataType<br />
SPDiscBurningDataType<br />
SPEthernetDataType<br />
SPFibreChannelDataType<br />
SPFireWireDataType<br />
SPDisplaysDataType<br />
SPHardwareRAIDDataType<br />
SPMemoryDataType<br />
SPPCIDataType<br />
SPParallelSCSIDataType<br />
SPPowerDataType<br />
SPPrintersDataType<br />
SPSASDataType<br />
SPSerialATADataType<br />
SPUSBDataType<br />
SPAirPortDataType<br />
SPFirewallDataType<br />
SPNetworkLocationDataType<br />
SPModemDataType<br />
SPNetworkVolumeDataType<br />
SPWWANDataType<br />
SPApplicationsDataType<br />
SPDeveloperToolsDataType<br />
SPExtensionsDataType<br />
SPFontsDataType<br />
SPFrameworksDataType<br />
SPLogsDataType<br />
SPManagedClientDataType<br />
SPPrefPaneDataType<br />
SPStartupItemDataType<br />
SPSyncServicesDataType<br />
SPUniversalAccessDataType</blockquote>Нас интересует только подсистема питания SPPowerDataType.<br />
Выполняем:<br />
<blockquote>$ system_profiler SPPowerDataType<br />
<pre>Power:
Battery Information:
Model Information:
Serial Number: 9G951015R4M1A
Manufacturer: DP
Device name: bq20z951
Pack Lot Code: 0000
PCB Lot Code: 0000
Firmware Version: 0042
Hardware Revision: 0001
Cell Revision: 0122
Charge Information:
Charge remaining (mAh): 8346
Fully charged: No
Charging: No
Full charge capacity (mAh): 11999
Health Information:
Cycle count: 99
Condition: Normal
Battery Installed: Yes
Amperage (mA): -3316
Voltage (mV): 7665
System Power Settings:
AC Power:
System Sleep Timer (Minutes): 60
Disk Sleep Timer (Minutes): 0
Display Sleep Timer (Minutes): 60
Automatic Restart On Power Loss: No
Wake On AC Change: No
Wake On Clamshell Open: Yes
Wake On LAN: Yes
Display Sleep Uses Dim: Yes
GPUSwitch: 2
Battery Power:
System Sleep Timer (Minutes): 10
Disk Sleep Timer (Minutes): 0
Display Sleep Timer (Minutes): 7
Wake On AC Change: No
Wake On Clamshell Open: Yes
Current Power Source: Yes
Display Sleep Uses Dim: Yes
GPUSwitch: 2
Reduce Brightness: Yes
Hardware Configuration:
UPS Installed: No
AC Charger Information:
Connected: No
Charging: No</pre></blockquote><br />
Предпоследняя строчка <br />
<blockquote>Connected: Yes</blockquote>показывает, что подключен внешний источник питания.<br />
И, наоборот,<br />
<blockquote>Connected: No</blockquote>говорит, что в настоящее время ноутбук работает от батареи.<br />
А показатель<br />
<blockquote>Charge remaining (mAh): 5893</blockquote>уведомляет об оставшемся заряде. Зная <blockquote>Full charge capacity (mAh): 12008</blockquote>можно посчитать процент заряда.<br />
Все необходимые нам индикаторы не составляет особого труда вычленить с помощью grep/awk, или, указав ключ <b>-xml</b>, распарсить результат с помощью Scala/Groovy.<br />
Можно использовать Automator, в нём имеется встроенный компонент "Профиль системы" с аналогичным функционалом.<br />
Теперь, с помощью cron, того же Automator и т.п. можно настроить, чтобы при падении заряда ниже какого-то уровня, отправлялось смс, почта и другие уведомления для принятия мер: воткнуть вилку в розетку или усыпить машину, если невозможно первое.wwarlockhttp://www.blogger.com/profile/06957450265432764050noreply@blogger.com0tag:blogger.com,1999:blog-2489041700196898836.post-21687055019743145422011-04-09T11:08:00.000-07:002011-04-10T11:00:40.590-07:00Eclipse, Android: ошибка "Conversion to Dalvik format failed with error 2"Оптимизировал я какое-то время назад работу Eclipse. Начитался разных форумов. Написал кучу разных опций в <i>eclipse.ini</i>. Полкучи потом выкинул. Файл принял вид:<br />
<br />
<div class="diff" style="font-family:monospace;color: #006; border: 1px solid #d0d0d0; background-color: #f0f0f0;"><span style="color: #991111;">-startup</span><br />
../../../plugins/org.eclipse.equinox.launcher_1.1.1.R36x_v20101122_1400.jar<br />
<span style="color: #991111;">--launcher.library</span><br />
../../../plugins/org.eclipse.equinox.launcher.cocoa.macosx_1.1.2.R36x_v20101019_1345<br />
<span style="color: #991111;">-server</span><br />
<span style="color: #991111;">-nosplash</span><br />
org.eclipse.platform<br />
<span style="color: #991111;">--launcher.XXMaxPermSize</span><br />
512m<br />
<span style="color: #991111;">-vmargs</span><br />
<span style="color: #991111;">-Dosgi.requiredJavaVersion=1.5</span><br />
<span style="color: #991111;">-Xms1024m</span><br />
<span style="color: #991111;">-Xmx1024m</span><br />
<span style="color: #991111;">-XX:PermSize</span><br />
512m<br />
<span style="color: #991111;">-XX:MaxPermSize</span><br />
512m<br />
<span style="color: #991111;">-XX:+UseParallelGC</span><br />
<span style="color: #991111;">-XX:+AggressiveOpts</span></div><br />
Всё было хорошо. Всё работало быстро и я забыл про это подкручивание.<br />
<br />
Потом какое-то время работал в Intellij Idea (рефакторинг у них непревзойдённый, конечно).<br />
<br />
А тут мне понадобился удобный эклипсовский <a href="http://www.questoid.com/Tools/QuestoidDevTools.aspx">плагин от Questoid для доступа к SQLite-базе</a> прямо из DDMS.<br />
Запускаю среду, а оно мне выдаёт на любой проект.<br />
<blockquote><b>Conversion to Dalvik format failed with error 2</b></blockquote><br />
Раз в Intellij Idea собирается нормально, то проблема явно локально-эклипсовая.<br />
Два часа блуждал по сети, перепробовал кучу способов, пока не наткнулся на <br />
<a href="http://code.google.com/p/android/issues/detail?id=9883">http://code.google.com/p/android/issues/detail?id=9883</a><br />
<br />
Убрал из конфига<br />
<div class="diff" style="font-family:monospace;color: #006; border: 1px solid #d0d0d0; background-color: #f0f0f0;"><span style="color: #991111;">-XX:+AggressiveOpts</span></div><br />
Работает, зараза!<br />
<br />
Мораль, излишняя оптимизация - зло.wwarlockhttp://www.blogger.com/profile/06957450265432764050noreply@blogger.com0tag:blogger.com,1999:blog-2489041700196898836.post-83535312183291755822010-12-23T06:08:00.000-08:002010-12-23T06:08:55.754-08:00ffmpeg (ffserver) for windowsСобрал ffmpeg (включая ffserver) под cygwin. <br />
Был использован ключ --disable-yasm.<br />
Версия, согласно git log<br />
<br />
commit 390071f52d1b4a768a0083dc55f3d3e361afc06c<br />
Author: mstorsjo <mstorsjo@9553f0bf-9b14-0410-a0b8-cfaf0461ba5b><br />
Date: Wed Dec 22 20:00:42 2010 +0000</mstorsjo@9553f0bf-9b14-0410-a0b8-cfaf0461ba5b><br />
<br />
Кому надо забирайте: <a href="https://docs.google.com/leaf?id=0ByAuxXegwjIZMGMzNGM5ZDYtM2NiNC00ZDhlLWI0MWYtZjVkYmE3NmVkNzA5&hl=ru">страница загрузки</a> или <a href="https://docs.google.com/uc?id=0ByAuxXegwjIZNmRmNzEwNmUtNTk4ZS00ZGJmLTliMWUtZTM5ZDVjZDY1Y2I2&export=download&authkey=CN3M2X4&hl=ru">файл</a>.wwarlockhttp://www.blogger.com/profile/06957450265432764050noreply@blogger.com3tag:blogger.com,1999:blog-2489041700196898836.post-1605166591527361712010-11-30T04:34:00.000-08:002010-11-30T04:34:14.665-08:00Как передать правильный путь Windows-приложению из CygwinРассмотрим такую ситуацию, для конкретики, возьму <i>Git</i>.<br />
Запущенный под <i>Cygwin</i>, он понимает пути только в Unix-формате, например, "<i>/cygdrive/c/home/projects</i>".<br />
Приложения, вроде <i>KDiff3, P4Merge</i> ждут этот путь в формате "<i>c:\home\projects</i>".<br />
<br />
Необходимо как-то сконвертировать.<br />
И такая утилита уже есть в комплекте Cygwin - называется <i>cygpath</i>.<br />
Она имеет много полезных параметров, но, в контексте решаемой задачи, нас интересуют только два:<br />
"<i>-w</i>" конвертирует путь в формат Windows.<br />
"<i>-a</i>" Выдаёт абсолютный путь.<br />
<br />
<br />
Дополнительно требуется обернуть строки в кавычки, на случай, если в путях попадутся знаки пробелов.<br />
Сейчас разделы инструментов сравнения в моём <i>~/.gitconfig</i> выглядят так (прочие параметры убрал для наглядности).<br />
<blockquote>[mergetool "kdiff"]<br />
path = /here_your_path/kdiff3.exe -b \"`cygpath -w -a $BASE`\" \"`cygpath -w -a $LOCAL`\" \"`cygpath -w -a $REMOTE`\" -o \"`cygpath -w -a $MERGED`\"<br />
<br />
[mergetool "p4m"]<br />
cmd = /here_your_path/p4merge \"`cygpath -w -a $BASE`\" \"`cygpath -w -a $LOCAL`\" \"`cygpath -w -a $REMOTE`\" \"`cygpath -w -a $MERGED`\"<br />
<br />
[difftool "p4m"]<br />
cmd = /here_your_path/p4merge \"`cygpath -w -a $LOCAL`\" \"`cygpath -w -a $REMOTE`\"<br />
<br />
[difftool "kdiff"]<br />
cmd = /here_your_path/kdiff3.exe \"`cygpath -w -a $LOCAL`\" \"`cygpath -w -a $REMOTE`\"<br />
</blockquote>wwarlockhttp://www.blogger.com/profile/06957450265432764050noreply@blogger.com0tag:blogger.com,1999:blog-2489041700196898836.post-36551714724963153482010-07-02T04:16:00.001-07:002011-06-29T01:35:46.035-07:00Синий экран смерти при подключении iPad к VMWare PlayerИмеется: VMWare Player 2.5.2, Windows XP в качестве гостя, iTunes 9.2.<br />
При подключении iPad к этой виртуальной машине, происходит BSOD.<br />
<pre style="color:#000000; background-color:#eeeeee; font-size:10pt; font-family:'Consolas';">BUGCODE_USB_DRIVER
STOP<span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#800080; font-weight:bold">0x000000FE</span> <span style="color:#ff0080; font-weight:bold">(</span><span style="color:#800080; font-weight:bold">0x00000005</span><span style="color:#ff0080; font-weight:bold">,</span> <span style="color:#800080; font-weight:bold">0x8228F0E0</span><span style="color:#ff0080; font-weight:bold">,</span> <span style="color:#800080; font-weight:bold">0x80867112</span><span style="color:#ff0080; font-weight:bold">,</span> <span style="color:#800080; font-weight:bold">0x822FFF70</span><span style="color:#ff0080; font-weight:bold">)</span>
</pre>В моём случае, помогло включение поддержки режима USB 2.0.<br />
Как это сделать описано в <a href="http://wwarlock.blogspot.com/2010/07/usb-20-vmware-player.html">предыдущей заметке</a>.wwarlockhttp://www.blogger.com/profile/06957450265432764050noreply@blogger.com0tag:blogger.com,1999:blog-2489041700196898836.post-40662679051725345012010-07-02T04:09:00.000-07:002011-04-02T13:24:01.257-07:00Как включить поддержку USB 2.0 в VMWare Player<style type="text/css">
<!--
body.hl { background-color:#1f1f1f; }
pre.hl { color:#dcdccc; background-color:#1f1f1f; font-size:10pt; font-family:'Consolas';}
.hl.num { color:#dca3a3; font-weight:bold; }
.hl.esc { color:#dca3a3; font-weight:bold; }
.hl.str { color:#cc9393; }
.hl.pps { color:#cc9393; }
.hl.slc { color:#7f9f7f; font-style:italic; }
.hl.com { color:#7f9f7f; font-style:italic; }
.hl.ppc { color:#ffcfaf; font-weight:bold; }
.hl.opt { color:#dcdccc; }
.hl.lin { color:#9fafaf; }
.hl.kwa { color:#e3ceab; }
.hl.kwb { color:#dfdfbf; font-weight:bold; }
.hl.kwc { color:#aae3b2; }
.hl.kwd { color:#aabfe3; }
//-->
</style><br />
<br />
<div dir="ltr" style="text-align: left;" trbidi="on">По умолчанию, в VMWare Player включена поддержка 1.0.<br />
Поэтому часто при подключении флэшек, фотокамер или других устройств, винда внутри виртуалки предупреждает, что устройство работает не так быстро как может.<br />
Попробуем это исправить.<br />
Необходимо выключить виртуальную машину и подредактировать конфигурационный vmx-файл.<br />
<br />
Скорее всего в нём уже есть строка:<br />
<pre class="hl"><span class="hl kwb">scsi0.present </span><span class="hl opt">=</span> <span class="hl kwc">"TRUE"</span>
</pre>К ней необходимо дописать ещё три, чтобы конфигурация приняла вид:<br />
<pre class="hl"><span class="hl kwb">scsi0.present </span><span class="hl opt">=</span> <span class="hl kwc">"TRUE"</span>
<span class="hl kwb">scsi0.pciSlotNumber </span><span class="hl opt">=</span> <span class="hl kwc">"-1"</span>
<span class="hl kwb">ehci.present </span><span class="hl opt">=</span> <span class="hl kwc">"TRUE"</span>
<span class="hl kwb">ehci.pciSlotNumber </span><span class="hl opt">=</span> <span class="hl kwc">"-1"</span>
</pre>Теперь, после загрузки виртуалки, USB-устройство должно работать на максимальной скорости.</div>wwarlockhttp://www.blogger.com/profile/06957450265432764050noreply@blogger.com0tag:blogger.com,1999:blog-2489041700196898836.post-51812399124000973382010-06-30T06:05:00.000-07:002010-06-30T06:05:56.173-07:00Про нашу судебную систему<b>Преамбула.</b><br />
Оговорюсь, никаких особенных интриг, все и так всё знают как у нас устроено, просто реальный случай, затронувший близких мне людей.<br />
<br />
В конце марта 2007 года мой брат и мой друг подали коллективный иск в суд на работодателя, чтобы добиться выплат за переработки.<br />
<br />
<b>Подача иска.</b><br />
Написали иск, подали, сказали ждать - перезвонят. <br />
Через полгода ожидания терпение лопнуло, пришлось звонить самим и напоминать.<br />
<div>Подняли дело и оказалось, что про дело забыли.</div><div>Затем состоялось заседание и оказалось, что дело назначили не в тот суд по подсудности.</div>Тут конечно есть доля оплошности от нанятого юриста, но в целом характеризует всю судебно-юридическую систему.<br />
Ответчик много раз переезжал и подали по месту последнего офиса, а представительство оказалось зарегистрировано в другом офисе, а офис последнего пребывания уже закрыли к этому времени.<br />
<br />
<b>Заседания суда.</b><br />
Разобрались куда подавать правильно, передали дело в нужный участок, назначили дату заседания. Но заседание перенесли из-за неявки ответчика.<br />
Следующее заседание перенесли из-за невозможности дозвониться в Москву до ответчика с 13-00 до 14-00 по Читинскому времени.<br />
Наконец заседание состоялось без ответчика, где судья уже склонялась вынести решение, но ответчик написал в письме какую-то белиберду в качестве отзыва на последнее заседание, её рассмотрели и назначили новое заседание, где всё таки вынесли решение в пользу истцов.<br />
Затем ответчик подал апелляцию.<br />
Но тут судью лишили права проводить данные дела.<br />
Посчитали что передавать дело другому судье это будет ещё дольше, и решили подождать.<br />
Судье всё-таки разрешили проводить дела и на последнем заседании решение вынесли в пользу братишки.<br />
Обязали работодателя выплатить всё до копейки. Но судье было некогда выносить решение в письменном виде и месяц просто ждали письменного решения.<br />
<br />
<b>Судебные приставы.</b><br />
На следующий день, после вынесения письменного решения по делу, оно было отправлено в центральный офис приставов по Москве, откуда должно ещё попасть в районный.<br />
Сейчас посылка из Америки или Гон-Конга может дойти за несколько дней.<br />
А здесь в пределах одного города, дело передавали неделю.<br />
Точнее даже не так. В центральном офисе неделю думали в какой район города отдать это дело.<br />
Наконец, придумали и сообщили об этом районному приставу.<br />
Как все знают, дороги в стране очень плохие.<br />
Поэтому районный пристав две недели ехал в центральный офис.<br />
<br />
А когда забрал, то они что? <br />
Правильно... их потеряли. Искали неделю, а когда нашли, то забыли зачем искали.<br />
Позвонили... Пнули... Напомнили...<br />
<br />
Случилось страшное, в старом кабинете перестало работаться и приставы недели 2 переезжали в другой кабинет.<br />
От всех этих хлопот (плюс тяжелая дорога до центрального офиса, вы не забыли?) пристав заболел.<br />
Пока он болел пришла какая-то проверка, перерыла все документы и они потеряли документы снова.<br />
<br />
К этому моменту события длятся уже три года и три месяца. Серьезно, а не как в сказке для красного словца, началось в 2007, сейчас 2010.<br />
<br />
Теперь, выясняется что приставы не могут получить данные из налоговой об ответчике, поэтому не могут ничего сделать.<br />
Пришлось эти данные искать брату, он их нашёл. Но они говорят, что не могут их принять, так как, внимание, у них в Москве нет интернета.<br />
Документы необходимо отправлять только по факсу.<br />
Я откопал недавно рабочий модем (предания старины глубокой, на 58 Килобит), но так сложилось, что в эру сотовых телефонов, городским телефоном обзаводиться не видели необходимости и модем оказался без дела.<br />
Пришлось проходить квест по поиску факса среди знакомых. Вроде нашли.<br />
<br />
<b>Вместо заключения.</b><br />
Город, где начались эти события, называется Чита.<br />
Но я полагаю, что каждый узнал здесь свои реалии.<br />
Продолжение, скорее всего, последует...wwarlockhttp://www.blogger.com/profile/06957450265432764050noreply@blogger.com0tag:blogger.com,1999:blog-2489041700196898836.post-69966675041601037112010-04-18T10:43:00.000-07:002010-04-18T10:43:49.797-07:00Необычный китайский велосипедВот такие интересные модели велосипедов попадаются в реальной жизни.<br />
Китайский не потому, что я уверен в стране-производства, а потому, что каталась на ней девочка-китаянка.<br />
<br />
Скорее всего привезли велосипед с собой, т.к. в прокате на ВДНХ я таких не обнаружил.<br />
<br />
Прошу прощения за качество фотографий, пришлось снимать на телефон и "от бедра". <br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6VcO6st9IRIsZQWkvMAMQkg0hFBA_e247FYx-BiRWyUO63gDheZNWRs5sYlvvCuhu05aItLhl85yAOWbB9I0aH8BRSxgKEjzwX1VEpEDS9UYn9FNSQaEmmLMyumZmlq4xS44zoxq5yADS/s1600/2010-04-10-19.57.39.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6VcO6st9IRIsZQWkvMAMQkg0hFBA_e247FYx-BiRWyUO63gDheZNWRs5sYlvvCuhu05aItLhl85yAOWbB9I0aH8BRSxgKEjzwX1VEpEDS9UYn9FNSQaEmmLMyumZmlq4xS44zoxq5yADS/s320/2010-04-10-19.57.39.jpg" /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvf1OG8rTJbZCBAzgyNUYqnwK1_87FaxWOqIQmsTwpzG-mRELKlK_oXTI87zv-PyIuSKxYSv2pKmNFFC3xzWmuCWX11HNszlRuhyv2R4Jb6UM7E5c31We_tSa6WlZfnZeo27e3rg4JUaDr/s1600/2010-04-10-19.57.50.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvf1OG8rTJbZCBAzgyNUYqnwK1_87FaxWOqIQmsTwpzG-mRELKlK_oXTI87zv-PyIuSKxYSv2pKmNFFC3xzWmuCWX11HNszlRuhyv2R4Jb6UM7E5c31We_tSa6WlZfnZeo27e3rg4JUaDr/s320/2010-04-10-19.57.50.jpg" /></a></div>wwarlockhttp://www.blogger.com/profile/06957450265432764050noreply@blogger.com0tag:blogger.com,1999:blog-2489041700196898836.post-38488315108603314312010-04-10T23:22:00.000-07:002010-04-10T23:22:57.244-07:00Анроид на аксимах! Теперь на DVD и для MacOs! Кряк не нужен!Решил промониторить сдвинулось ли портирование андроида на аксимчики.<br />
Вбил в гугл "<i>dell axim x51v android</i>".<br />
<br />
Нашёл такое:<br />
<i>http://fil*****asury.com/?route=search&s=4&query=android+on+dell+axim+x51v&wmid=10&hl=RU</i><br />
<br />
Где предлагают скачать:<br />
<br />
<blockquote>ANDROID-ON-DELL-AXIM-X51V.RU-[Mac Version].Build-1434.zip<br />
updated 10/04/2010<br />
<br />
[MAC]-android_on_dell_axim_x51v.RU-Deluxe.Edition.zip<br />
updated 10/04/2010<br />
<br />
android_on_dell_axim_x51v.RU.S01E09.WS.PDTV.XviD.avi<br />
updated 11/04/2010<br />
<br />
ANDROID-ON-DELL-AXIM-X51V.RU.2010-Edition+Patch.zip<br />
updated 10/04/2010<br />
<br />
[android.on.dell.axim.x51v].2009.MD.DVDscr.XviD.avi<br />
updated 10/04/2010<br />
<br />
ANDROID_ON_DELL_AXIM_X51V_RU BY LASTSTAYER<br />
updated 10/04/2010</blockquote><br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0f7jl9EiWdZSaoanUu3tyAt0WHiz2oQ9v9l-WDy2AHeFVZvE5vnfiFEWIPHD04LNELl1mL_kRqowT4fhBzsBlvxhp177V-fvd8RWcqVeokrQlGxC82zabmzDT9sici5-5637ZekOV02Zg/s1600/%D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA-%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0-2010-04-11-%D0%B2-9.11.26.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0f7jl9EiWdZSaoanUu3tyAt0WHiz2oQ9v9l-WDy2AHeFVZvE5vnfiFEWIPHD04LNELl1mL_kRqowT4fhBzsBlvxhp177V-fvd8RWcqVeokrQlGxC82zabmzDT9sici5-5637ZekOV02Zg/s320/%D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA-%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0-2010-04-11-%D0%B2-9.11.26.jpg" /></a></div><br />
<br />
Естественно, не бесплатно.<br />
Что вы хотели? Раритет )wwarlockhttp://www.blogger.com/profile/06957450265432764050noreply@blogger.com0tag:blogger.com,1999:blog-2489041700196898836.post-31097119155361541512010-03-08T07:53:00.000-08:002011-04-19T05:19:34.613-07:00Корзина товаров в CodeIgniter и русские буквыПри вызове <b>$this->cart->insert()</b> фреймворк проверяет поля регэкспом.<br />
Если в <i>product_id</i> или <i>product_name</i> будет что-то отличное от латинских букв и цифр, то запрос успешно проигнорируется без каких-либо ошибок.<br />
И такие баги я ненавижу больше всего.<br />
Итак, чтобы починить, открываем <i>/system/libraries/Cart.php</i>. <br />
<br />
В самом начале видим:<br />
<pre style="color:#dcdccc; background-color:#1f1f1f; font-size:10pt; font-family:'Consolas';"><span style="color:#e3ceab">class</span> CI_Cart <span style="color:#dcdccc">{</span>
<span style="color:#7f9f7f; font-style:italic">// These are the regular expression rules that we use to validate the product ID and product name</span>
<span style="color:#e3ceab">var</span> <span style="color:#aae3b2">$product_id_rules</span> <span style="color:#dcdccc">=</span> <span style="color:#cc9393">'\.a-z0-9_-'</span><span style="color:#dcdccc">;</span> <span style="color:#7f9f7f; font-style:italic">// alpha-numeric, dashes, underscores, or periods</span>
<span style="color:#e3ceab">var</span> <span style="color:#aae3b2">$product_name_rules</span> <span style="color:#dcdccc">=</span> <span style="color:#cc9393">'\.\:\-_ a-z0-9'</span><span style="color:#dcdccc">;</span> <span style="color:#7f9f7f; font-style:italic">// alpha-numeric, dashes, underscores, colons or periods</span>
</pre><br />
Добавляем "<i>а-я</i>" в регэксп, должно получиться так:<br />
<pre style="color:#dcdccc; background-color:#1f1f1f; font-size:10pt; font-family:'Consolas';"><span style="color:#e3ceab">var</span> <span style="color:#aae3b2">$product_id_rules</span> <span style="color:#dcdccc">=</span> <span style="color:#cc9393">'\.a-z0-9_-а-яА-Я'</span><span style="color:#dcdccc">;</span>
<span style="color:#e3ceab">var</span> <span style="color:#aae3b2">$product_name_rules</span> <span style="color:#dcdccc">=</span> <span style="color:#cc9393">'\.\:\-_ a-z0-9а-яА-Я'</span><span style="color:#dcdccc">;</span>
</pre>Теперь переходим к методу <b>function _insert($items = array())</b><br />
<br />
Добавляем к проверке правило для уникода (буква <b>u</b>, после <b>$/i</b>).<br />
Должно получиться так:<br />
<pre style="color:#dcdccc; background-color:#1f1f1f; font-size:10pt; font-family:'Consolas';"><span style="color:#e3ceab">if</span> <span style="color:#dcdccc">( !</span> <span style="color:#aabfe3">preg_match</span><span style="color:#dcdccc">(</span><span style="color:#cc9393">"/^["</span><span style="color:#dcdccc">.</span><span style="color:#aae3b2">$this</span><span style="color:#dcdccc">-></span>product_id_rules<span style="color:#dcdccc">.</span><span style="color:#cc9393">"]+$/iu"</span><span style="color:#dcdccc">,</span> <span style="color:#aae3b2">$items</span><span style="color:#dcdccc">[</span><span style="color:#cc9393">'id'</span><span style="color:#dcdccc">]))</span>
<span style="color:#e3ceab">if</span> <span style="color:#dcdccc">( !</span> <span style="color:#aabfe3">preg_match</span><span style="color:#dcdccc">(</span><span style="color:#cc9393">"/^["</span><span style="color:#dcdccc">.</span><span style="color:#aae3b2">$this</span><span style="color:#dcdccc">-></span>product_name_rules<span style="color:#dcdccc">.</span><span style="color:#cc9393">"]+$/iu"</span><span style="color:#dcdccc">,</span> <span style="color:#aae3b2">$items</span><span style="color:#dcdccc">[</span><span style="color:#cc9393">'name'</span><span style="color:#dcdccc">]))</span>
</pre>Теперь товары с русскими буквами должны сохраняться нормально.wwarlockhttp://www.blogger.com/profile/06957450265432764050noreply@blogger.com9tag:blogger.com,1999:blog-2489041700196898836.post-41281772283231217182010-02-23T05:06:00.000-08:002010-02-23T05:09:45.011-08:00Как заставить сотрудничать Smarty и Form Helper из CodeIgniterТак как, при использовании шаблонизатора Smarty, ограничивается использование PHP-тегов, необходимо искать другие пути.<br />
<br />
Один из них это разработка плагина для Smarty.<br />
Немного покопавшись, я нашёл <a href="http://codeigniter.com/wiki/Form_helper_with_Smarty/">готовый</a>, но меня не устроил ограниченный набор передаваемых параметров.<br />
<br />
Поэтому я допилил до следующего вида:<br />
<style type="text/css">
<!--
/**
* GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann
* (http://qbnz.com/highlighter/ and http://geshi.org/)
*/
.php .de1, .php .de2 {font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;color: #000020;}
.php {font-family:monospace;color: #006; border: 1px solid #d0d0d0; background-color: #f0f0f0;}
.php a:link {color: #000060;}
.php a:hover {background-color: #f0f000;}
.php .imp {font-weight: bold; color: red;}
.php li, .php .li1 {font-weight: normal; vertical-align:top;font: normal normal 130% 'Courier New', Courier, monospace; color: #003030;}
.php .ln {width:1px;text-align:right;margin:0;padding:0 2px;vertical-align:top;}
.php .li2 {font-weight: bold; vertical-align:top;font-weight: bold; color: #006060;}
.php .kw1 {color: #b1b100;}
.php .kw2 {color: #000000; font-weight: bold;}
.php .kw3 {color: #990000;}
.php .kw4 {color: #009900; font-weight: bold;}
.php .co1 {color: #666666; font-style: italic;}
.php .co2 {color: #666666; font-style: italic;}
.php .co3 {color: #0000cc; font-style: italic;}
.php .co4 {color: #009933; font-style: italic;}
.php .coMULTI {color: #666666; font-style: italic;}
.php .es0 {color: #000099; font-weight: bold;}
.php .es1 {color: #000099; font-weight: bold;}
.php .es2 {color: #660099; font-weight: bold;}
.php .es3 {color: #660099; font-weight: bold;}
.php .es4 {color: #006699; font-weight: bold;}
.php .es5 {color: #006699; font-weight: bold; font-style: italic;}
.php .es6 {color: #009933; font-weight: bold;}
.php .es_h {color: #000099; font-weight: bold;}
.php .br0 {color: #009900;}
.php .sy0 {color: #339933;}
.php .sy1 {color: #000000; font-weight: bold;}
.php .st0 {color: #0000ff;}
.php .st_h {color: #0000ff;}
.php .nu0 {color: #cc66cc;}
.php .nu8 {color: #208080;}
.php .nu12 {color: #208080;}
.php .nu19 {color:#800080;}
.php .me1 {color: #004000;}
.php .me2 {color: #004000;}
.php .re0 {color: #000088;}
.php span.xtra { display:block; }
--!>
</style><br />
<div class="php"><ol><li class="li1"><br />
<br />
<div class="de1"><span class="kw2"><?php</span></div></li>
<li class="li1"><br />
<br />
<div class="de1"><span class="coMULTI">/*</span></div></li>
<li class="li1"><br />
<br />
<div class="de1"><span class="coMULTI"> Author: Svetoslav Marinov; svetoslavm [] gmail.com</span></div></li>
<li class="li1"><br />
<br />
<div class="de1"><span class="coMULTI"> Inspired by: http://codeigniter.com/wiki/Use_URL_helper_from_Smarty/</span></div></li>
<li class="li2"><br />
<br />
<div class="de2"><span class="coMULTI"> Modified: Dmitriy S. Aleshkowsky; to.wwarlock [] gmail.com</span></div></li>
<li class="li1"><br />
<br />
<div class="de1"><span class="coMULTI"> */</span></div></li>
<li class="li1"><br />
<br />
<div class="de1"></div></li>
<li class="li1"><br />
<br />
<div class="de1"><span class="kw2">function</span> smarty_function_form<span class="br0">(</span><span class="re0">$params</span><span class="sy0">,</span> <span class="sy0">&</span><span class="re0">$smarty</span><span class="br0">)</span></div></li>
<li class="li1"><br />
<br />
<div class="de1"><span class="br0">{</span></div></li>
<li class="li1"><br />
<br />
<div class="de1"> <span class="co1">//check if the needed function exists</span></div></li>
<li class="li1"><br />
<br />
<div class="de1"> <span class="co1">//otherwise try to load it</span></div></li>
<li class="li1"><br />
<br />
<div class="de1"> <span class="kw1">if</span> <span class="br0">(</span><span class="sy0">!</span><a href="http://www.php.net/function_exists"><span class="kw3">function_exists</span></a><span class="br0">(</span><span class="st_h">'form_open'</span><span class="br0">)</span><span class="br0">)</span> <span class="br0">{</span></div></li>
<li class="li1"><br />
<br />
<div class="de1"> <span class="co1">//return error message in case we can't get CI instance</span></div></li>
<li class="li2"><br />
<br />
<div class="de2"> <span class="kw1">if</span> <span class="br0">(</span><span class="sy0">!</span><a href="http://www.php.net/function_exists"><span class="kw3">function_exists</span></a><span class="br0">(</span><span class="st_h">'get_instance'</span><span class="br0">)</span><span class="br0">)</span> <span class="kw1">return</span> <span class="st0">"Can't get CI instance"</span><span class="sy0">;</span></div></li>
<li class="li1"><br />
<br />
<div class="de1"> <span class="re0">$CI</span> <span class="sy0">=&</span> get_instance<span class="br0">(</span><span class="br0">)</span><span class="sy0">;</span></div></li>
<li class="li1"><br />
<br />
<div class="de1"> <span class="re0">$CI</span><span class="sy0">-></span><span class="me1">load</span><span class="sy0">-></span><span class="me1">helper</span><span class="br0">(</span><span class="st_h">'form'</span><span class="br0">)</span><span class="sy0">;</span></div></li>
<li class="li1"><br />
<br />
<div class="de1"> <span class="br0">}</span></div></li>
<li class="li1"><br />
<br />
<div class="de1"></div></li>
<li class="li2"><br />
<br />
<div class="de2"> <span class="co1">// Making it more complex</span></div></li>
<li class="li1"><br />
<br />
<div class="de1"> <span class="kw1">if</span> <span class="br0">(</span><a href="http://www.php.net/isset"><span class="kw3">isset</span></a><span class="br0">(</span><span class="re0">$params</span><span class="br0">[</span><span class="st_h">'url'</span><span class="br0">]</span><span class="br0">)</span><span class="br0">)</span> <span class="br0">{</span></div></li>
<li class="li1"><br />
<br />
<div class="de1"> <span class="re0">$url</span> <span class="sy0">=</span> <span class="re0">$params</span><span class="br0">[</span><span class="st_h">'url'</span><span class="br0">]</span><span class="sy0">;</span></div></li>
<li class="li1"><br />
<br />
<div class="de1"> <a href="http://www.php.net/unset"><span class="kw3">unset</span></a> <span class="br0">(</span><span class="re0">$params</span><span class="br0">[</span><span class="st_h">'url'</span><span class="br0">]</span><span class="br0">)</span><span class="sy0">;</span></div></li>
<li class="li1"><br />
<br />
<div class="de1"> <span class="kw1">if</span> <span class="br0">(</span><span class="re0">$params</span><span class="br0">[</span><span class="st_h">'type'</span><span class="br0">]</span> <span class="sy0">==</span> <span class="st_h">'upload'</span><span class="br0">)</span></div></li>
<li class="li2"><br />
<br />
<div class="de2"> <span class="br0">{</span></div></li>
<li class="li1"><br />
<br />
<div class="de1"> <a href="http://www.php.net/unset"><span class="kw3">unset</span></a> <span class="br0">(</span><span class="re0">$params</span><span class="br0">[</span><span class="st_h">'type'</span><span class="br0">]</span><span class="br0">)</span><span class="sy0">;</span></div></li>
<li class="li1"><br />
<br />
<div class="de1"> <span class="kw1">return</span> form_open_multipart<span class="br0">(</span><span class="re0">$url</span><span class="sy0">,</span> <span class="re0">$params</span><span class="br0">)</span><span class="sy0">;</span></div></li>
<li class="li1"><br />
<br />
<div class="de1"> <span class="br0">}</span> <span class="kw1">else</span> <span class="br0">{</span></div></li>
<li class="li1"><br />
<br />
<div class="de1"> <span class="kw1">return</span> form_open<span class="br0">(</span><span class="re0">$url</span><span class="sy0">,</span> <span class="re0">$params</span><span class="br0">)</span><span class="sy0">;</span></div></li>
<li class="li2"><br />
<br />
<div class="de2"> <span class="br0">}</span></div></li>
<li class="li1"><br />
<br />
<div class="de1"> <span class="br0">}</span> <span class="kw1">elseif</span> <span class="br0">(</span><a href="http://www.php.net/empty"><span class="kw3">empty</span></a><span class="br0">(</span><span class="re0">$params</span><span class="br0">)</span><span class="br0">)</span> <span class="br0">{</span></div></li>
<li class="li1"><br />
<br />
<div class="de1"> <span class="kw1">return</span> form_close<span class="br0">(</span><span class="br0">)</span><span class="sy0">;</span></div></li>
<li class="li1"><br />
<br />
<div class="de1"> <span class="br0">}</span></div></li>
<li class="li1"><br />
<br />
<div class="de1"><span class="br0">}</span></div></li>
<li class="li2"><br />
<br />
<div class="de2"><span class="sy1">?></span></div></li>
</ol></div><br />
Согласно <a href="http://codeigniter.com/user_guide/helpers/form_helper.html">API</a> можно ещё добавить параметры для скрытых полей, однако у меня не было в них необходимости, поэтому я намеренно не стал их реализовывать.wwarlockhttp://www.blogger.com/profile/06957450265432764050noreply@blogger.com0