tag:blogger.com,1999:blog-10059649475764768242024-03-12T18:09:17.837-07:00Дневник начинающего программистаБлог начинающего программиста. Android, Python, Linux и другое. Anonymoushttp://www.blogger.com/profile/01621311971466115072noreply@blogger.comBlogger10125tag:blogger.com,1999:blog-1005964947576476824.post-10852407475691417472013-03-07T08:37:00.000-08:002013-03-07T08:46:08.833-08:00Простое пианино для Android<div dir="ltr" style="text-align: left;" trbidi="on">
Решил ещё немного попробовать себя в роли Android-разработчика.<br />
Ссылка на apk-файл: <a href="https://github.com/kosc/droidino/raw/master/bin/Drodino.apk">https://github.com/kosc/droidino/raw/master/bin/Drodino.apk</a><br />
Исходники на github: <a href="https://github.com/kosc/droidino">https://github.com/kosc/droidino</a><br />
Идеи по улучшению приветствуются.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsjA3US5vsPqUqZLzHBu3p2UCVDsGC9lhE6EA2U_hTVWiXd3i210SfDh0ii-Hn6sjdIx1dC_nlYEAMMh-e73yAsINLo_Et-znp6z8q6Doy8nYn4UPMzAq1Bheh46r7ncFTfqfkMp4aimA/s1600/Screenshot_2013-03-07-20-40-26.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="213" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsjA3US5vsPqUqZLzHBu3p2UCVDsGC9lhE6EA2U_hTVWiXd3i210SfDh0ii-Hn6sjdIx1dC_nlYEAMMh-e73yAsINLo_Et-znp6z8q6Doy8nYn4UPMzAq1Bheh46r7ncFTfqfkMp4aimA/s320/Screenshot_2013-03-07-20-40-26.png" width="320" /></a></div>
</div>
Anonymoushttp://www.blogger.com/profile/01621311971466115072noreply@blogger.com3tag:blogger.com,1999:blog-1005964947576476824.post-19428702785787221812012-08-06T02:39:00.000-07:002012-09-22T16:09:59.795-07:00Пишем простейший слайдер на jQuery<div dir="ltr" style="text-align: left;" trbidi="on">
Начал изучение jQuery. Сделал простой слайдер. В планах - сделать генератор слайдеров с back-end'ом на Django. Вот исходники слайдера (можете считать, что лицензия GNU GPL :-) ):<br />
<br />
<!DOCTYPE html><br />
<html><br />
<head><br />
<meta charset="utf-8"><br />
<title>Изучаем jQuery</title><br />
<!-- подключаем JQuery --><br />
<script type="text/javascript" src="js/jquery-1.7.2.min.js"></script><br />
<!-- jQuery Timers - плагин для таймеров --><br />
<script type="text/javascript" src="js/jquery.timers.js"></script><br />
<!-- Стиль лучше класть в отдельный файл, как и скрипт. Но здесь, для наглядности примера, я слил всё в один файл --><br />
<style><br />
.invisible{<br />
display: none;<br />
}<br />
</style><br />
<script type="text/javascript"><br />
/* когда документ будет загружен, начнётся выполение анонимной функции */<br />
$(document).ready(function(){<br />
var active = 1; // индекс следующего отображаемого слайда<br />
$(document).everyTime(5000, function(){ /* каждые 5 секунд. Функция взята из плагина jQuery Timers */<br />
$("#slider dt").each(function(i){ /* обходим все элементы немаркированного списка */<br />
if (i != active) $(this).slideUp(); /* анимированно убрать слайд, если он не активный */<br />
else $(this).slideDown(); /* иначе анимированно показать слайд */<br />
});<br />
/* вычисляем, какой слай будет следующий */<br />
if (active != 2) active++;<br />
else active = 0;<br />
});<br />
});<br />
</script><br />
</head><br />
<body><br />
<p><br />
Простейший слайдер на jQuery.<br />
</p><br />
<div id="slider"><br />
<dl><br />
<dt><br />
<img src="img/apple.jpg" /><br />
<br /><br />
<span>Apple Computers</span><br />
</dt><br />
<dt class="invisible"><br />
<img src="img/google.jpg" /><br />
<br /><br />
<span>Google Incorporated</span><br />
</dt><br />
<dt class="invisible"><br />
<img src="img/microsoft.jpg" /><br />
<br /><br />
<span>Microsoft Corporation</span><br />
</dt><br />
</dl><br />
</div><br />
</body><br />
</html><br />
<br />
Для того, что бы слайдер заработал, понадобиться скачать jQuery, плагин к нему jQuery Timers и фотки. У меня они размером 640x480. Искал через Google по названиям трёх гигантов IT-рынка.</div>
Anonymoushttp://www.blogger.com/profile/01621311971466115072noreply@blogger.com0tag:blogger.com,1999:blog-1005964947576476824.post-16341640057725220002012-06-12T00:51:00.000-07:002012-06-12T00:51:58.819-07:00Drowser - как написать простейший браузер для Android<div dir="ltr" style="text-align: left;" trbidi="on">
В этой статье я расскажу, как написать простейший браузер для Android.<br />
Тестировал на эмуляторе Android 2.2 и HTC Wildfire.<br />
Надеюсь, что Eclipse к разработке под андроид вы уже настроили. Так что приступим.<br />
<br />
Первым делом, надо попросить у устройства разрешение на доступ к интернету для вашего приложения. Это делается в файле AndroidManifest.xml . Нужно просто добавить слудующую строчку:<br />
<pre style='color:#000000;background:#ffffff;'><span style='color:#808030; '><</span>uses<span style='color:#808030; '>-</span>permission android<span style='color:#800080; '>:</span>name<span style='color:#808030; '>=</span><span style='color:#800000; '>"</span><span style='color:#0000e6; '>android.permission.INTERNET</span><span style='color:#800000; '>"</span> <span style='color:#808030; '>/</span><span style='color:#808030; '>></span>
</pre><br />
Как дочерний элемент корня (тэг <manifest>) . Я добавил после строки про uses-sdk. </div>
Далее идём в /res/layout/main.xml и заменяем имеющийся там код на следующий:
<pre style='color:#000000;background:#ffffff;'><span style='color:#808030; '><</span><span style='color:#800080; '>?</span>xml version<span style='color:#808030; '>=</span><span style='color:#800000; '>"</span><span style='color:#0000e6; '>1.0</span><span style='color:#800000; '>"</span> encoding<span style='color:#808030; '>=</span><span style='color:#800000; '>"</span><span style='color:#0000e6; '>utf-8</span><span style='color:#800000; '>"</span><span style='color:#800080; '>?</span><span style='color:#808030; '>></span>
<span style='color:#808030; '><</span>WebView xmlns<span style='color:#800080; '>:</span>android<span style='color:#808030; '>=</span><span style='color:#800000; '>"</span><span style='color:#0000e6; '>http://schemas.android.com/apk/res/android</span><span style='color:#800000; '>"</span>
<span style='color:#e34adc; '>    android:</span>id<span style='color:#808030; '>=</span><span style='color:#800000; '>"</span><span style='color:#0000e6; '>@+id/webview</span><span style='color:#800000; '>"</span>
<span style='color:#e34adc; '>    android:</span>layout_width<span style='color:#808030; '>=</span><span style='color:#800000; '>"</span><span style='color:#0000e6; '>fill_parent</span><span style='color:#800000; '>"</span>
<span style='color:#e34adc; '>    android:</span>layout_height<span style='color:#808030; '>=</span><span style='color:#800000; '>"</span><span style='color:#0000e6; '>fill_parent</span><span style='color:#800000; '>"</span>
<span style='color:#808030; '>/</span><span style='color:#808030; '>></span>
</pre>
<i>fill_parent</i> - это что бы браузер был на весь экран. Иное просто не имеет смысла.
Теперь идём в /src/имя.вашего.пакета/ИмяАктивити.java
У меня это /src/ru.tuluk.kosc.drowser . Добавляем во эту строчку:
<pre style='color:#000000;background:#ffffff;'><span style='color:#800000; font-weight:bold; '>import</span><span style='color:#004a43; '> android</span><span style='color:#808030; '>.</span><span style='color:#004a43; '>webkit</span><span style='color:#808030; '>.</span><span style='color:#004a43; '>WebView</span><span style='color:#800080; '>;</span>
</pre>
В верхней части, рядом с аналогичными строками импорта. Эта строка нужна для импорта класса WebView, который как раз и представляет собой стандартный браузер Android. Теперь нам нужно создать экземпляр этого класса.
Под строкой, начинающейся с public class, напишите: WebView mWebView;
Теперь осталось направить пользователя на стартовую страницу. после строки setContentView(R.layout.main); напишите: <br />
<pre style='color:#000000;background:#ffffff;'>mWebView = (WebView) findViewById(R.id.webview)<span style='color:#808030; '>;</span> <span style='color:#696969; '>// связываем наш экземпляр класса с WebView на форме</span>
mWebView.getSettings().setJavaScriptEnabled(true)<span style='color:#808030; '>;</span> <span style='color:#696969; '>// включаем JavaScript (можно этого и не делать, но тогда возможности будут не полными)</span>
mWebView.loadUrl("http://polukoder.blogspot.com/"); <span style='color:#696969; '>// грузим стартовую страницу</span>
</pre>
Ну вот и всё, можно запускать. Честно говоря, для меня было большим сюрпризом, что WebView работает абсолютно так же, как и встроенный браузер - даже кнопка Menu вызывает такое же меню. В следующий раз надеюсь рассказать, как улучшить этот браузер, добавить своё меню и некоторые другие фишки.Anonymoushttp://www.blogger.com/profile/01621311971466115072noreply@blogger.com0tag:blogger.com,1999:blog-1005964947576476824.post-26766161443731211822012-03-27T00:50:00.001-07:002012-03-27T00:50:37.654-07:00Magic 8 ball для AndroidРешил я тут опять потренироваться в разработке под Android - проверить, не всё ли уже забыл. Вспомнил, как мой товарищ Алексей, ещё живя в общежитии, написал Magic 8 ball из фильма "Траса 60". На C++, под консоль, но оно работало и даже отображало кириллицу. Решил написать нечто подобное для Android, код ниже.
<pre style='color:#000000;background:#ffffff;'><span style='color:#7f0055; font-weight:bold; '>package</span><span style='color:#7f0055; '> ru</span><span style='color:#7f0055; '>.</span><span style='color:#7f0055; '>qover</span><span style='color:#7f0055; '>.</span><span style='color:#7f0055; '>testing</span><span style='color:#7f0055; '>;</span>
<span style='color:#7f0055; font-weight:bold; '>import</span><span style='color:#7f0055; '> android</span><span style='color:#7f0055; '>.</span><span style='color:#7f0055; '>app</span><span style='color:#7f0055; '>.</span><span style='color:#7f0055; '>Activity</span><span style='color:#7f0055; '>;</span>
<span style='color:#7f0055; font-weight:bold; '>import</span><span style='color:#7f0055; '> android</span><span style='color:#7f0055; '>.</span><span style='color:#7f0055; '>os</span><span style='color:#7f0055; '>.</span><span style='color:#7f0055; '>Bundle</span><span style='color:#7f0055; '>;</span>
<span style='color:#7f0055; font-weight:bold; '>import</span><span style='color:#7f0055; '> android</span><span style='color:#7f0055; '>.</span><span style='color:#7f0055; '>view</span><span style='color:#7f0055; '>.</span><span style='color:#7f0055; '>View</span><span style='color:#7f0055; '>;</span>
<span style='color:#7f0055; font-weight:bold; '>import</span><span style='color:#7f0055; '> android</span><span style='color:#7f0055; '>.</span><span style='color:#7f0055; '>view</span><span style='color:#7f0055; '>.</span><span style='color:#7f0055; '>View</span><span style='color:#7f0055; '>.</span><span style='color:#7f0055; '>OnClickListener</span><span style='color:#7f0055; '>;</span>
<span style='color:#7f0055; font-weight:bold; '>import</span><span style='color:#7f0055; '> android</span><span style='color:#7f0055; '>.</span><span style='color:#7f0055; '>widget</span><span style='color:#7f0055; '>.</span><span style='color:#7f0055; '>Button</span><span style='color:#7f0055; '>;</span>
<span style='color:#7f0055; font-weight:bold; '>import</span><span style='color:#7f0055; '> java</span><span style='color:#7f0055; '>.</span><span style='color:#7f0055; '>util</span><span style='color:#7f0055; '>.</span><span style='color:#7f0055; '>Random</span><span style='color:#7f0055; '>;</span>
<span style='color:#7f0055; font-weight:bold; '>import</span><span style='color:#7f0055; '> android</span><span style='color:#7f0055; '>.</span><span style='color:#7f0055; '>widget</span><span style='color:#7f0055; '>.</span><span style='color:#7f0055; '>TextView</span><span style='color:#7f0055; '>;</span>
<span style='color:#7f0055; font-weight:bold; '>public</span> <span style='color:#7f0055; font-weight:bold; '>class</span> TestingActivity <span style='color:#7f0055; font-weight:bold; '>extends</span> Activity {
<span style='color:#7f0055; font-weight:bold; '>Random</span> rand;
<span style='color:#7f0055; font-weight:bold; '>Button</span> btn;
TextView text;
<span style='color:#3f5fbf; '>/** Called when the activity is first created. */</span>
@Override
<span style='color:#7f0055; font-weight:bold; '>public</span> <span style='color:#7f0055; font-weight:bold; '>void</span> onCreate(Bundle savedInstanceState) {
<span style='color:#7f0055; font-weight:bold; '>super</span>.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn = (<span style='color:#7f0055; font-weight:bold; '>Button</span>)findViewById(R.id.button1);
btn.setOnClickListener(getString);
text = (TextView)findViewById(R.id.textView1);
rand = <span style='color:#7f0055; font-weight:bold; '>new</span> <span style='color:#7f0055; font-weight:bold; '>Random</span>();
}
<span style='color:#7f0055; font-weight:bold; '>private</span> OnClickListener getString = <span style='color:#7f0055; font-weight:bold; '>new</span> OnClickListener()
{
<span style='color:#7f0055; font-weight:bold; '>public</span> <span style='color:#7f0055; font-weight:bold; '>void</span> onClick(View v)
{
<span style='color:#7f0055; font-weight:bold; '>Integer</span> num = rand.nextInt(20) + 1;
<span style='color:#7f0055; font-weight:bold; '>switch</span>(num)
{
<span style='color:#7f0055; font-weight:bold; '>case</span> 1:
text.setText(R.string.s1);
<span style='color:#7f0055; font-weight:bold; '>break</span>;
<span style='color:#7f0055; font-weight:bold; '>case</span> 2:
text.setText(R.string.s2);
<span style='color:#7f0055; font-weight:bold; '>break</span>;
<span style='color:#7f0055; font-weight:bold; '>case</span> 3:
text.setText(R.string.s3);
<span style='color:#7f0055; font-weight:bold; '>break</span>;
<span style='color:#7f0055; font-weight:bold; '>case</span> 4:
text.setText(R.string.s4);
<span style='color:#7f0055; font-weight:bold; '>break</span>;
<span style='color:#7f0055; font-weight:bold; '>case</span> 5:
text.setText(R.string.s5);
<span style='color:#7f0055; font-weight:bold; '>break</span>;
<span style='color:#7f0055; font-weight:bold; '>case</span> 6:
text.setText(R.string.s6);
<span style='color:#7f0055; font-weight:bold; '>break</span>;
<span style='color:#7f0055; font-weight:bold; '>case</span> 7:
text.setText(R.string.s7);
<span style='color:#7f0055; font-weight:bold; '>break</span>;
<span style='color:#7f0055; font-weight:bold; '>case</span> 8:
text.setText(R.string.s8);
<span style='color:#7f0055; font-weight:bold; '>break</span>;
<span style='color:#7f0055; font-weight:bold; '>case</span> 9:
text.setText(R.string.s9);
<span style='color:#7f0055; font-weight:bold; '>break</span>;
<span style='color:#7f0055; font-weight:bold; '>case</span> 10:
text.setText(R.string.s10);
<span style='color:#7f0055; font-weight:bold; '>break</span>;
<span style='color:#7f0055; font-weight:bold; '>case</span> 11:
text.setText(R.string.s11);
<span style='color:#7f0055; font-weight:bold; '>break</span>;
<span style='color:#7f0055; font-weight:bold; '>case</span> 12:
text.setText(R.string.s12);
<span style='color:#7f0055; font-weight:bold; '>break</span>;
<span style='color:#7f0055; font-weight:bold; '>case</span> 13:
text.setText(R.string.s13);
<span style='color:#7f0055; font-weight:bold; '>break</span>;
<span style='color:#7f0055; font-weight:bold; '>case</span> 14:
text.setText(R.string.s14);
<span style='color:#7f0055; font-weight:bold; '>break</span>;
<span style='color:#7f0055; font-weight:bold; '>case</span> 15:
text.setText(R.string.s15);
<span style='color:#7f0055; font-weight:bold; '>break</span>;
<span style='color:#7f0055; font-weight:bold; '>case</span> 16:
text.setText(R.string.s16);
<span style='color:#7f0055; font-weight:bold; '>break</span>;
<span style='color:#7f0055; font-weight:bold; '>case</span> 17:
text.setText(R.string.s17);
<span style='color:#7f0055; font-weight:bold; '>break</span>;
<span style='color:#7f0055; font-weight:bold; '>case</span> 18:
text.setText(R.string.s18);
<span style='color:#7f0055; font-weight:bold; '>break</span>;
<span style='color:#7f0055; font-weight:bold; '>case</span> 19:
text.setText(R.string.s19);
<span style='color:#7f0055; font-weight:bold; '>break</span>;
<span style='color:#7f0055; font-weight:bold; '>case</span> 20:
text.setText(R.string.s20);
<span style='color:#7f0055; font-weight:bold; '>break</span>;
};
}
};
}
</pre>
Строки засунуты в strings.xml, потому как это оптимальнее. Сами файлы strings.xml и раскладку (layout) main.xml выкладывать не стану, если кому сильно надо - пишите в личку, вышлю. Тем более, что каждый разработчик должен сам решать, как должны быть расположены компоненты интерфейса.Anonymoushttp://www.blogger.com/profile/01621311971466115072noreply@blogger.com0tag:blogger.com,1999:blog-1005964947576476824.post-58323844900733444942012-03-15T22:20:00.001-07:002012-03-15T22:20:53.524-07:00SharpDevelopСегодня я расскажу о такой замечательной вещи, как SharpDevelop. Это IDE с открытым исходным кодом. Написана она на .NET, и сама предпологает написание программ на этой платформе. Первое отличие от Visual Studio, которое бросилось мне в глаза - эта среда легче, быстрее, и генерирует более оптимальный и понятный код. Одно только название главной формы у Win32-приложения чего стоит ('Form1' у Visual Studio vs 'MainForm' у SharpDevelop). Так же заметил тесную интеграцию с <a href="http://seorev.ru/gd/repozitorii-dlya-nachinayushhix-svn-i-mercurial/">svn</a>. В студии эта интеграция тоже поддерживается, но её надо дополнительно настраивать, скачивая дополнительный плагин и долго с ним мучаясь. Помимо создания всех возможных видов приложений на VB .Net и C#, SharpDevelop умеет переводить эти языки друг на друга, а так же на Python и Ruby (этого я в VS тоже не встречал).
Итак, если вы за open-source, если вы против пиратства и не работаете в компании, которая оплатит вам студию и заставит в ней кодить, если вы заинтересованны в создании проектов на среде .NET, то SharpDevelop - ваш выбор. Скачать это чудо программерской мысли и его исходники можно <a href="http://sourceforge.net/projects/sharpdevelop/">здесь</a>. Сам пользуюсь 4.2.0 beta, и не заметил ещё ни одной причины, по которой она считаеться бетой.Anonymoushttp://www.blogger.com/profile/01621311971466115072noreply@blogger.com0tag:blogger.com,1999:blog-1005964947576476824.post-10405488367881458192012-03-09T07:21:00.000-08:002012-03-09T07:21:31.502-08:00Linux и Lenovo S10-3cДавно известная проблема - на S10-3C ни в одном *nix из коробки не работает клавиатура. Сегодня покопался по форумам - проблема всего-то в устаревшей версии bios, перепрошился (причём перепрошиться можно только из-под Windows). Поставил Linux Mint. Работает и клавиатура, и даже wi-fi, но gnome 3 не для нетбуков. Да и в других DE виснет постоянно. Снёс. Решил вернуться к Ubuntu. Ах да, только сегодня узнал, что загрузочная флэшка должна быть отформатирована в FAT32, иначе загрузиться с неё не удастся. Это не блог про linux, но упоминать о нём я здесь буду.
Скоро продолжу блогодвижок на Yii.Anonymoushttp://www.blogger.com/profile/01621311971466115072noreply@blogger.com0tag:blogger.com,1999:blog-1005964947576476824.post-31036722607036827842012-01-08T09:08:00.000-08:002012-01-08T09:08:11.050-08:00Арканоид на flash: продолжение<div dir="ltr" style="text-align: left;" trbidi="on">
Начал писать другой арканоид, с нуля, теперь весь код не во fla, а во внешних as-файлах. Теперь выкладываю только swf, ибо исходники стали сильно жирными. Ещё наконец-то разобрался с Box2D - я пытался использовать версию 2.1а (последнюю на момент написания), а она нестабильна. Взял версию 2.0.2 - всё отлично. Но с чужими движками мне рано ещё разбираться - надо сначала более-менее нормальный свой написать. Тогда и знаний ActionScript хватит на Box2D.<br />
<br />
Ах да, я тут swf обещал: <a href="https://sites.google.com/site/koscind/arcanoid.swf?attredirects=0&d=1">arcanoid.swf</a></div>Anonymoushttp://www.blogger.com/profile/01621311971466115072noreply@blogger.com0tag:blogger.com,1999:blog-1005964947576476824.post-82154926331642204852011-12-20T03:42:00.000-08:002011-12-23T23:03:41.883-08:00Арканоид на flash<div dir="ltr" style="text-align: left;" trbidi="on">
Давно сюда не писал, решил продолжить. С тех пор, как делал последнюю запись, многое изменилось. Нашёл в работу, пишу программу на C# в Visual Studio 2010.<br />
На досуге, just for fun, изучаю flash. Написал арканоид. Никакого меню, 1 уровень, но оно играет, а для первого раза мне и того достаточно.<br />
<br />
Исходники во fla (Flash CS5): <a href="https://sites.google.com/site/koscind/KoscAnoid.rar?attredirects=0&d=1">KoscAnoid</a></div>Anonymoushttp://www.blogger.com/profile/01621311971466115072noreply@blogger.com0tag:blogger.com,1999:blog-1005964947576476824.post-10859242434430661952011-11-05T03:45:00.000-07:002011-11-05T03:45:15.285-07:00Snake 2: продолжение<div dir="ltr" style="text-align: left;" trbidi="on">
С первоначальным кодом вроде разобрался, но у игры почему-то нереально длинное время отклика - более 0.5 секунды. Есть мысь, сесть и написать с нуля, самостоятельно. В таком случае так же выложу сюда все исходники. </div>Anonymoushttp://www.blogger.com/profile/01621311971466115072noreply@blogger.com0tag:blogger.com,1999:blog-1005964947576476824.post-10280936940406253662011-10-19T07:48:00.000-07:002011-11-05T03:45:15.294-07:00Змейка на Java<div dir="ltr" style="text-align: left;" trbidi="on">
Взялся за развитие игры "Snake" с Викиучебника. Сам пишу в Eclipse Galileo из-под Ubuntu 10.04 Netbook Remix. Планирую усовершенствовать проект, что даст мне опыт программирования на Java. Согласно лицензии, все изменения буду выкладывать в открытый доступ. Оригинал игры можно посмотреть здесь - <a href="http://ru.wikibooks.org/wiki/Java/%D0%98%D0%B3%D1%80%D0%B0_%D0%B7%D0%BC%D0%B5%D0%B9%D0%BA%D0%B0/">http://ru.wikibooks.org/wiki/Java/Игра_змейка/</a><br />
<br />
В комментариях можете указывать, какие именно изменения и дополнения вы хотели бы видеть в Snake - 2.</div>Anonymoushttp://www.blogger.com/profile/01621311971466115072noreply@blogger.com0