یکی از مشکلاتی که وقت ارایه ها دارم، کنترل اسلایدهاست. نشستن پشت کامپیوتر و زدن دکمه یا انجام دادن این توسط یه نفر دیگه :) روش معمولشه، ولی روش من نیست.
جدیدا با پیشرفت html5 و ابزارهایی مثل bartaz/impress.js بد نیست که به فکر بروزرها باشیم برای اینکار.
برای کنفرانس زنجان تصمیم گرفتم که اینکارو بکنم برای ارایه. البته من زمان کافی برای چنین ارایه مفصلی نداشتم و ارایه من تنها چند اسلاید پشت سرهم که با html درست شده بود، بود. اما باقی قضیه چی؟ بازم برای کنترل این اسلاید نیاز به دسترسی به کامپیوتره. محمد افاضاتی برای رفع این مشکل، از یک ماوس وایرلس استفاده کرد. راه بدی نبود، ولی بازم به فکر چیز دیگه ای بودم.
یکی از افزونه هایی که توی فایرفاکس من خیلی دوستش دارم MozRepl :: Add-ons for Firefox ـه. به شما اجازه میده که از طریق سوکت (مثلا از طریق telnet ) وارد صفحه بشید و بتونید جاوااسکریپت رو اجرا کنید.
خیلی ساده، نصبش کنید، از منوی Tools/MozRepl فعالش کنید و تمام. حالا میشه با هر ابزاری مثل telnet بهش وصل شد :
rlwrap telnet 127.0.0.1 4242
که البته rlwrap برای ویندوز لازم نیست، تو لینوکس هم لازم نیست ولی برای اینکه تو ترمینال راحت تر باشید توصیه میکنم که rlwrap رو نصب کنید که بتونید ازش استفاده کنید. اگر هر مشکلی بود خیلی راحت از اول دستور حذفش کنید.
خوب همین دیگه تمومه.
توی این ترمینال بعد از نصب یه نشونه دیده میشه repl> کافیه جلوش مثلا بزنید
alert('test')
و نتیجه رو توی فایرفاکس ببینید. راهنمای نسبتا کاملتری هم اینجا Tutorial · bard/mozrepl Wiki هست.
گام بعدی باید برید سراغ اسلایدهاتون. توی اسلایدهای html که دارید، دو تا تابع جاوااسکریپت بگذارید. مثلا next و back که کارشون هم حرکت توی اسلایدهاست. یکی برای اسلاید بعدی و اون یکی برای اسلاید قبلی. خیلی ساده. حالا اسلاید رو باز کنید و توی ترمینال mozrepl سعی کنید که توابعتون رو فراخوانی کنید، بله ممکن نیست :)
این مشکلی بود که بیشترین وقت من رو برای این اسلایدها گرفت. اینجا فایرفاکس یه کم حقه باز میشه :) ولی خوب بعد یادم اومد که تقریبا چنین مشکلی رو وقتی میخواستم یه افزونه برای فایرفاکس بنویسم داشتم، و بعد یادم اومد که توی فایرفاکس، window.content برای افزونه ها یه جورایی محدود شدست و توابع داخل صفحه رو شامل نمیشه :) به خودم کلی خندیدم.
برای اینکار باید از window._content استفاده بشه، به این صورت :
repl.enter(window._content) back() next() whatever()
یعنی به جای فراخوانی توابع در کانتکست content باید در _content اونها رو فراخوانی کرد و این یک آندرلاین، تقریبا ۱۰ ساعت وقت منو گرفت :)))
اما خوب، اجرای تلنت توی گوشی و کانکت شدن به این، به چند دلیل ممکن نیست. یکی اینکه باز گذاشتن آی پی توسط mozrepl برای خارج هم ممکنه، (منوشو توی فایرفاکس ببینید) ولی اصلا امن نیست.
دوم اینکه آخه وقت ارایه بشینم تایپ کنم mozrepl.enter و فلان و بهمان؟ اصلا بیخیال همون میشینم پای کامپیوتر و سنتی ارایه میدم :) نه. راه ساده ای هم هست که توی php و html خلاصه میشه :)
کافیه که گوشی بتونه توی شبکه کامپیوتر باشه. توی کامپیوتر (همونجایی که فایرفاکس برای ارایه گوش به زنگه) یک وب سرور که برای اجرای php تنظیم شده اجرا میشه، یه اسکریپت ساده لازمه :
<?php
class SocketHelper
{
private $address = "127.0.0.1";
private $port = "4242";
private $socket = null;
public function connect()
{
$this->socket=socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
if(!$this->socket){
socket_strerror($this->socket)."\n";
return false;
}
$result=socket_connect($this->socket,$this->address,$this->port);
if(!$result){
socket_strerror($result)."\n";
socket_close($this->socket);
return false;
}
$this->read();
return true;
}
/** Send a command to MozRepl */
public function send_command($command){
$command.="\n";
socket_write($this->socket,$command);
return $this->read();
}
/*
Read from the Socket until we get a "repl>" prompt,
or loop forever.
*/
private function read(){
$response = '';
while(1){
$chunk = socket_read($this->socket,65536,PHP_BINARY_READ);
echo $chunk;
if($chunk === false){
echo "Error reading from socket\n";
break;
}
if($chunk === "") break; //No more data
if(preg_match('|^(.*)\s*repl\d*>\s*$|s',$chunk,$match)){
$response .= $match[1];
break;
}
$response .= $chunk;
}
return $response;
}
}
– کد بالا از اینجا اومده. ولی تا جایی که یادمه یه تغییرات کوچیکی هم من دادم بهش یا ممکنه نداده باشم :)) الان این آدرس آفلاینه.
باقیش سادست! یه فایل php مثلا index.php که به اینصورته :
<?php
require "mozrepl.php";
$moz = new SocketHelper();
$moz->connect();
if (isset($_GET["next"])) {
$moz->send_command("repl.enter(window._content)");
$moz->send_command("next()");
} elseif ( isset($_GET["back"])) {
$moz->send_command("repl.enter(window._content)");
$moz->send_command("back()");
}
?><!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>HTML5 Gaming</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="">
<meta name="author" content="">
<!-- Le styles -->
<link href="css/bootstrap.css" rel="stylesheet">
<link href="css/bootstrap-rtl.css" rel="stylesheet">
<style type="text/css">
body {
padding-top: 60px;
padding-bottom: 40px;
direction : rtl;
font-family : "IranianSans";
}
.btn {
width: 300px;
height: 200px;
}
</style>
</head>
<body>
<div class="container">
<a href="<?php echo $_SERVER['PHP_SELF']?>?back=1" class="btn btn-success">Back</a>
<a href="<?php echo $_SERVER['PHP_SELF']?>?next=1" class="btn btn-success">Next</a>
</div> <!-- /container -->
</body>
</html>
و البته کاملا مشخصه که اسم فایل اولی mozrepl.php باشه :) حالا توی بروزر گوشی آدرس کامپیوتر رو میزنیم (که به راحتی میشه مثلا با نام کاربری و رمز محافظتش کرد) و دو تا دکمه میبینیم که back و next هستن :) توضیح بیشتری هم لازمه؟ خیلی وقته ننوشتم سخت شده برام :))




خلاصه در مورد این روش ارائت نوشتی. از وقتی تو identica زیر اون دنت mozrepl گفتی با این ارائه دادی، تو کف بودم چطوری این میتونه روش بهتری باشه. حتی تا ته پستت هم ایدش رو نگرفته بودم. ولی آخرش که گفتی گوشی، یعنی خداییش کفم برید با این خلاقیتت!
موافقید یا نه :
0
0
ایده باحالیه! خوشم اومد ازش
موافقید یا نه :
0
0
آندرلاین نه، آندراسکور underscore
پ.ن همیشه آرزو داشتم که نصف تو سواد داشته باشم :)
موافقید یا نه :
0
0
راه حله جالبی بود ولی به نظرم یه خورده انجامش دردناک جلوه می کنه.
مثلا میشد با یه هم چین چیزی هم انجامش داد:
http://shop.sito.ir/%D8%B3%D8%AE%D8%AA-%D8%A7%D9%81%D8%B2%D8%A7%D8%B1-%DA%A9%D9%86%D8%AA%D8%B1%D9%84-%D8%A7%D8%B2-%D8%B1%D8%A7%D9%87-%D8%AF%D9%88%D8%B1-%D9%84%DB%8C%D9%86%D9%88%DA%A9%D8%B3—Linux-Remote-Control-p-1869.html
موافقید یا نه :
0
0
بعد این با usb وصل میشه، سیمشو چیکار کنیم؟
موافقید یا نه :
0
0
خب اینو وصل می کنی به لپ تاپ یا هر سیستمی که اسلاید ها روش قرار دارن! بعد از روی سن اسلاید ها رو عقب جلو می کنی.
موافقید یا نه :
0
0
مشکل سیمشه خوب دوود. اونو چیکار کنیم؟
موافقید یا نه :
0
0
فکر کردم گفتی سیستمش!!
با سیمش چی کار داری با کنترل از راه دور اسلاید ها رو پس و پیش می کنی!!
موافقید یا نه :
0
0
والا مشکل اول سیم بود که من اینهمه دوز و کلک سوار کردم دیگه! با سیم بسته میشی به یه جا و من نمیخوام.
موافقید یا نه :
0
0
واقعا شایستهی لقب گیک هستید، هر چقدرم سخت باشه یا هر چی ( که فکر نمیکنم باشه) خیلی ایدهی جذابی بود و خلاصه کف کردیم :)
موافقید یا نه :
1
0
ایده خوبی بود اما میتونستی با Bluetooth هم اوکی کنی .
البته این سوکت پروگرامینگ میشد با یک برنامه جاوایی کوچک باشه . اگه وقت کنم آمادش میکنم . یک چیزی شبیه teamViewer میشه البته بدون استریم تصویر و میتونی با ارسال آرگومان به سرور ماوس را حرکت بدی و تایپ انجام بدی .
ولی بازم زیبا بود کارت فرود جان . بالاخره گیک ها از غیر گیکها باید شناخته شن .
سیرجونی آبرومون را بردی نــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــه :دی
موافقید یا نه :
0
0
راه حتما زیاد هست براش. ولی این روشی بود که من انتخاب کردم. به نظرم جالب بود و انجامش دادم :))
موافقید یا نه :
2
0
بله اما من هم مثل jeus معتقدم که وقتب بلوتوثهای ما همه ریموت کنترل داره و میشه بجای موس و جهت نمای کیبورد ازش استفاده کنیم، چرا نکنیم؟!
موافقید یا نه :
0
0
خیلی کارها میشه انجام داد. ولی من هنوز ریموت کنترل بلوتوثی ندیدم (یا بهتره بگم ندارم، چون ممکنه تو بازار باشه) که بتونه فایرفاکس رو کنترل کنه. چون مطمئنا از این به بعد همه اسلایدهای من html خواهد بود.
بعد هنوز نمیدونم که مشکل وایرلس چیه؟ چرا وایرلس نه؟ چرا حتما بلوتوث؟ در ثانی من برای این کار کد خاصی ننوشتم. چند خط کد php بوده که کلا ۵ دقیقه وقتمو گرفته ولی آیا برای بلوتوث هم با همین حجم کم کد ممکنه همچین کاری کرد؟
موافقید یا نه :
1
0
عالی بود :))
موافقید یا نه :
1
0
با یک گوشی اندروییدی میشد!
خیلی برنامه هست، مثل slide presentation control
موافقید یا نه :
0
0
خوب برای لینوکس چی داری؟ اینها که گفتی اول گشتم دنبالشون. بعد تازه شما هم درست بگی، کجای این قضیه جالب میشه؟ بعد تازه من که گفتم، html هستن اسلایدهام.
موافقید یا نه :
1
0
۱- اکثر این برنامهها با جاوا نوشته شده و توی لینوکس کار میکنه.
۲- باید حتمن «جالب» بشه؟ منظورت رو نفهمیدم!
۳- کافیه توی کد HTMLای که نوشتی، تنظیم کنی که با کلید چپ و راست یا اسپیس و بکاسپیس یا پیج آپ و پیج داون صفحه جابهجا بشه.
این برنامهها هم چیزی جز فرستادن کد چند تا کلید کیبورد رو انجام نمیدن.
موافقید یا نه :
0
0
۱- نه. کار نمیکنه. خیلی گشتم. یه سری اسلاید کنترلر برای MS Office بود و من نمیخواستم. یکی برای open office بود که بازم درست کار نکرد. vnc هم مد نظرم نبود. (یا هر چیزی که کل صفحه رو بده)
در حالت عادی هم من میخوام فول کنترل باشم روی اسلایدم. توی اسلایدهای من، یه صفحه بود که استپ به استپ با فراخوانی یه تابع جاوااسکریپت یه سری کار انجام میداد،که لزومی ندیدم توضیحش بدم، چون یه مورد خاص بود.
من میخوام یه سری تابع جاوااسکریپت خاص با یه سری دکمه خاص اجرا بشن (اینجا فقط نوشتم back و next ) ولی ممکنه بیشتر باشن – و در اصل هم بودن – چیزی برای این منظور سراغ داری که لینک بدی؟
۲- بله، جالب نباشن که میشه مثل یکی از کارهایی که توی روز انجام میدم. دیگه چرا باید دربارش بنویسم؟
۳- کد html توی فایرفاکس توی دسکتاپمه، من چطور اینکارو بکنم؟ مثلا با رویدادهای جاوااسکریپت؟ به نظر خودت یه کم احمقانه نیست؟ این کاری که الان انجام دادم ساده تر نیست؟؟؟ و البته جذاب تر؟
موافقید یا نه :
0
0
۱- این کنترلهای اسلاید هیچ چیزی جز چند کلید کیبورد نیستند! اگر توی لینوکس کار کنه (که من یکی دو مورد دیدم) با هر برنامهای که با اسپیس و یکاسپیس کار کنه، کار میکنه.
۲- بحث پیچیدهای است، بخواهم در موردش حرف بزنم، کلی منحرف میشیم :-) به هر حال این نظر شخصیته و اینم وبلاگ شخصیت :-) پس مشکلی نیست.
۳- «ساده» بودن یک کار هم یک چیز شخصی است. به نظر من نوشتن یک خط کد اوااسکریپت (یا حتا کپی کردنش!) خیلی سادهتره :-) اما باز هم این نظر شخصی شما است و اینجا هم وبلاگ شخصی شما… و بخش کامنتها جایی برای نظرات شخصی بقیه :دی :پی
موافقید یا نه :
0
0
[...] [...]
موافقید یا نه :
0
0
من داغون شدم با این پست :)) عالی بود!
موافقید یا نه :
1
0