آیا می‌شه با نود.جی.اس. برنامه کلاینت ساید نوشت؟

امیر پرسیده:

سلام جادی .
من با تکنولوژی اشنا شدم که خودت میدونی چیه . node.js رو میگم. میخواستم بدونم میشه با این node.js نرم افزار هایی تحت دسکتاپ درست کرد. من جایی شنیدم که میشه همچین کاری کرد اما نتونستم اطلاعاتی به دست بیارم . من منطق خودم میگه میشه همچین کاری کرد . وقتی موتور جاوا اسکریپ روی مرورگر میتونه یک بازی رو کامپایل کنه پس ما وقتی این موتور رو ازش جدا کنیم و اون رو روی ویندوز یا هر پلتفرمی قرار بدیم . حالا هم میتوینم اون بازی رو کامپایل کنیم ولی این بار نه در مرورگر . ( به صورت ی برنامه ی معمولی ) که روی پلتفرم اجرا میشه .
شایدم من اشتباه میکنم ( فقط میشه باهاش سرور راه انداخت ) اگر در این باره اطلاعی داری ( در اختیارم بزار )..ممنون … منتظر جوابم .

چیزهایی که گفتی تقریبا درسته – البته با چند اصلاح ریز. NodeJS زبان اسکریپتی است پس به معنای سنتی چیزی رو کمپایل نمی کنه و در نتیجه امکان اجرای مستقل روی سیستم‌ها هم نداره. NodeJS اصالتا جاوااسکریپت است و جاوا اسکریپت برای اجرا شدن به شکل گرافیکی و نمایش چیزها نیاز به یک بستر داره. این بستر شامل براوزری است که موتور جاوااسکریپت روشه. حالا کاری که نود.جی.اس. کرده اینه که اون موتور جاوا رو سمت سرور اجرا کرده ولی آیا اینکار توی کلاینت هم ممکنه؟

همونطور که بالا گفتم، داشتن برنامه های دسکتاپ با نود.جی.اس. نیاز به این داره که ما یک موتور رندر اچ تی ام ال داشته باشیم (که بتونه صفحه رو گرافیکی نشون بده) و یک موتور جاوااسکریپت. پروژه‌هایی مثل node-webkit سعی کردن این دو تا رو در یک برنامه بذارن و به شما پنجره‌ای بدن که ظاهرش بیشتر از اونی که شبیه براوزر باشه شبیه پنجره معمولی برنامه ها باشه ولی اچ تی ام ال پنج و جاوا اسکریپت بفهمه. همین تلاش به شکل دیگه ای در پروژه node-qt اتفاق افتاده و اونجا سعی شده رابط گرافیکی qt به همراه nodejs بسته بندی بشه تا بشه برای دسکتاپ هایی از لینوکس تا مک تا ویندوز برنامه نوشت.

و آخرین نکته؟ این ابزارها هنوز کامل نیستن و جاوااسکریپت (و طبعا نود.جی.اس.) هم برای اینکار درست نشده. درسته که در آینده ممکنه همه اینکارها رو با جاوااسکریپت بکنیم ولی در این لحظه نود.جی.اس. هنوز برنامه دسکتاپ نوشتن نیست و اگر کسی سراغش می ره مشغول باحال بازی یا کشف آینده است یا استفاده از مهارت‌هاش برای راحت‌تر کار یا برعکس، استفاده از یک چیز نامناسب به منظور پیشرفت فنی.

وَر رفتن با اعداد، نور خورشید و نموداری که شاید باعث بشه استعفا بدین

برای من اینطرف کشیدن ساعت معنی اش اینه که دیگه نمی تونم لای پرده رو باز بذارم و به موقع با نور آفتاب بیدار بشم. الان نور افتاب منو ساعت شش بیدار خواهد کرد. اصولا این ساعت رو اینطرف و اونطرف کشیدن چه تاثیری توی نور روز داره و در سطحی بالاتر، من که این روزها از هفت از خونه بیرون می رم در بهترین حالت شش و ربع می رسم، چقدر از سال تو تاریکی می یام بیرون و تو تاریکی بر می گردم. بذارین به پیروی از این مقاله که کار مشابهی کرده با بسته نرم افزاری جادویی R، با اعداد ور بریم.

مشخصه که نیاز به کتابخونه ای داریم که فانکشن های sunrise و غیره رو دارن پس:

> library(maptools)

و کافیه لت و لانگ تهران رو بهش بدیم:

> portsmouth <- matrix(c(51.4231, 35.6961), nrow=1)

و تاریخ:

> for_date <- as.POSIXct("2014-09-25", tz="Asia/Tehran")

و ازش بخوایم ساعت طلوع خورشید امروز رو بده:

> sunriset(portsmouth, for_date, direction="sunrise", POSIXct.out=TRUE)
        day_frac                time
newlon 0.2460366 2014-09-25 05:54:17

بله ظاهرا درسته ! خورشید ما رو ساعت ۵ و ۵۴ دقیقه صبح بیدار می کنه که مثل گرگ پاشیم بریم سر کار. این کتابخونه همچنین می تونه به ما زمان غروب، طول روز و ظهر رو هم بده و از اون باحالتر می تونه ورودی هایی به فرم بردارهایی از روزها قبول کنه. پس این تابع:

# adapted from http://r.789695.n4.nabble.com/maptools-sunrise-sunset-function-td874148.html
ephemeris <- function(lat, lon, date, span=1, tz="UTC") {
 
  # convert to the format we need
  lon.lat <- matrix(c(lon, lat), nrow=1)
 
  # make our sequence - using noon gets us around daylight saving time issues
  day <- as.POSIXct(date, tz=tz)
  sequence <- seq(from=day, length.out=span , by="days")
 
  # get our data
  sunrise <- sunriset(lon.lat, sequence, direction="sunrise", POSIXct.out=TRUE)
  sunset <- sunriset(lon.lat, sequence, direction="sunset", POSIXct.out=TRUE)
  solar_noon <- solarnoon(lon.lat, sequence, POSIXct.out=TRUE)
 
  # build a data frame from the vectors
  data.frame(date=as.Date(sunrise$time),
             sunrise=as.numeric(format(sunrise$time, "%H%M")),
             solarnoon=as.numeric(format(solar_noon$time, "%H%M")),
             sunset=as.numeric(format(sunset$time, "%H%M")),
             day_length=as.numeric(sunset$time-sunrise$time))
 
}

می تونه لت و لانگ (طول و عرض) یک مکان رو بگیره و به اندازه date روز بعد از تاریخی که بهش گفتیم، به ما بگه که وضعیت نور روز چطوریه (اونم توی تایم زون مورد نظر):

> ephemeris(35.6961, 51.4231, "2014-09-25", 10, tz="Asia/Tehran")
         date sunrise solarnoon sunset day_length
1  2014-09-25     554      1156   1757   12.05001
2  2014-09-26     555      1155   1755   12.01276
3  2014-09-27     555      1155   1754   11.97550
4  2014-09-28     556      1155   1752   11.93826
5  2014-09-29     557      1154   1751   11.90104
6  2014-09-30     558      1154   1750   11.86384
7  2014-10-01     558      1154   1748   11.82666
8  2014-10-02     559      1153   1747   11.78952
9  2014-10-03     600      1153   1745   11.75241
10 2014-10-04     601      1153   1744   11.71535

جالبه ولی نه به اندازه کافی. مغز اکثر ما نمودارها رو بهتر از جدول ها می فهمه. پس ما با توابع ggplot دو تا نمودار می کشیم. یکی نمودار نواری که نشون بده چه بخشی از روز نور آفتاب داره و چه بخش هایی تاریکه و یک نمودار دیگه که به سادگی بگه هر روز از سال چند ساعت نور داره.

library(ggplot2)
library(scales)
library(gridExtra)

# create two formatter functions for the x-axis display
 
# for graph #1 y-axis
time_format <- function(hrmn) substr(sprintf("%04d", hrmn),1,2)
 
# for graph #2 y-axis
pad5 <- function(num) sprintf("%2d", num)
 
daylight <- function(lat, lon, place, start_date, span=2, tz="UTC", 
                     show_solar_noon=TRUE, show_now=TRUE, plot=TRUE) {
 
  stopifnot(span>=2) # really doesn't make much sense to plot 1 value
 
  srss <- ephemeris(lat, lon, start_date, span, tz)
 
  x_label = ""
 
  gg <- ggplot(srss, aes(x=date))
  gg <- gg + geom_ribbon(aes(ymin=sunrise, ymax=sunset), fill="#ffeda0")
 
  if (show_solar_noon) gg <- gg + geom_line(aes(y=solarnoon), color="#fd8d3c")
 
  if (show_now) {
    gg <- gg + geom_vline(xintercept=as.numeric(as.Date(Sys.time())), color="#800026", linetype="longdash", size=0.25)
    x_label = sprintf("زمان در لحظه ترسیم نمودار: %s", format(Sys.time(), "%Y-%m-%d / %H:%M"))
  }
 
  gg <- gg + geom_hline(yintercept=as.numeric("0700"), color="#1000F6", linetype="longdash", size=0.25)
  gg <- gg + geom_hline(yintercept=as.numeric("1815"), color="#1000F6", linetype="longdash", size=0.25)

  gg <- gg + scale_x_date(expand=c(0,0), labels=date_format("%b "))
  gg <- gg + scale_y_continuous(labels=time_format, limits=c(0,2400), breaks=seq(0, 2400, 200), expand=c(0,0))
  gg <- gg + labs(x=x_label, y="",
                  title=sprintf("طلوع و غروب خورشید در %s\n%s ", place, paste0(range(srss$date), sep=" ", collapse="تا ")))
  gg <- gg + theme_bw()
  gg <- gg + theme(panel.background=element_rect(fill="#525252"))
  gg <- gg + theme(panel.grid=element_blank())
 
  gg1 <- ggplot(srss, aes(x=date, y=day_length))
  gg1 <- gg1 + geom_area(fill="#ffeda0")
  gg1 <- gg1 + geom_line(color="#525252")
 
  if (show_now) gg1 <- gg1 + geom_vline(xintercept=as.numeric(as.Date(Sys.time())), color="#800026", linetype="longdash", size=0.25)
 
  gg1 <- gg1 + scale_x_date(expand=c(0,0), labels=date_format("%b "))
  gg1 <- gg1 + scale_y_continuous(labels=pad5, limits=c(0,24), expand=c(0,0))
  gg1 <- gg1 + labs(x="", y="", title="طول روز به ساعت")
  gg1 <- gg1 + theme_bw()
 
  if (plot) grid.arrange(gg, gg1, nrow=2)
 
  arrangeGrob(gg, gg1, nrow=2)
 
}

و حالا می تونیم هر چیزی بخوایم بکشیم.. مثلا برای تهران:

daylight(35.6961, 51.4231, "Tehran", "2014-03-21", 365, tz="Asia/Tehran")

باعث می شه به این برسیم:

daylight_tehran

نمودار بالا نشون می ده چه ساعت های از روز صبح است و چه ساعت هایی شب و نمودار پایینی نشون دهنده ساعت های روشنایی است که در هر روز داریم و توش به راحتی می تونین تاثیر اینطرف اونطرف کشیدن ساعت رو ببینین.

خط عمودی در نمودار بالا مشخص کرده الان کجای سال هستیم و دو خط نقطه چین افقی می گن اگر یک نفر لازم باشه از هفت صبح از خونه بره بیرون و شش و ربع برگرده، چه زمان‌هایی از نور آفتاب در زندگی اجتماعی دور است. این نمودار ممکنه باعث بشه شما از کارتون استعفا بدین.

می بنین اعداد چقدر قشنگن؟

پروژه گیکی درآمد زا برای گیک‌های پردازش تصویر و دارای پنجره مناسب: عکاسی و جدا کردن پلاک

pelak

راستش من عاشق پروژه‌هایی هستم که با کمی کار، یک ربات شروع می کنه پول در آوردن برای من! اصولا این شیوه محبوب درآمدم است (: حالا هم یک شرکت که روی تشخیص پلاک و چنین چیزهایی کار می کنه و من هم می شناسمشون دنبال جمع کردن تعداد خیلی زیادی عکس از پلاک ماشین‌ها هستن. عکس هایی واضح که دورشون بریده شده باشه.

این شرکت برای هر عکس ۵۰ تومن می ده. مطمئنا برای یک گیک نمی ارزه با دوربین بیافته توی خیابون و احیانا توسط برادران که به زمین و زمون شک دارن دستگیر هم بشه ولی دقیقا یک گیک تخصصش توی راحت کردن کارهای تکراری است!

اگر من بودم و حوصله داشتم و اتفاقا پنجره ای داشتم که به جای معقولی دید داشته باشه، یک دوربین می ذاشتم پشت پنجره که مثلا هر ده ثانیه یکبار یک عکس بگیره بعد عکسها رو می دادم به یک الگوریتم تشخیص پلاک و اتوماتیک پلاک ها رو می ریختم توی یک دایرکتوری و شاید بعد از کمی برنامه نویسی و سر هم کردن الگوریتم‌ها، می رفتم یک چرخی می زدم چون مطمئن بودم در طول یکی دو روز آینده یک ماشین چاپ اسکناس هر ده ثانیه هفت هشت تا پنجاه تومنی برام چاپ می کنه (:

اگر به نظرتون پروژه عملی است و دوست دارین درگیرش بشین، می تونین با pelak@efazati.org تماس بگیرین. من رو که سر ذوق آورد ولی متاسفانه نه پنجره مناسب دارم نه وقت مناسب.

چند نکته
– اگر تصویرها از پلاک‌های غیررسمی / مثلا دولتی باشن بهتره
– معلومه که قبل از ارسال پنجاه هزار تصویر، باید مکاتبه کنین و ببینین اصلا عکس هایی که می گیرین همونی است که طرف می خواد
– کلی چیز این وسط یاد می گیرین
– بحث جالبی است که آیا اینکار اخلاقی است؟ آیا کمک به پلیس برای کشف اتوماتیک پلاک کار خوبیه (به فرض که پروژه این باشه. من دقیق نمی دونم چیه) یا مثلا آیا عکس گرفتن از پلاک خودروها در خیابون نقض حریم شخصی اونها است؟ اینها بحث های جالب و مفصلی است و چلنج‌های خوب ذهنی.
– تکرار می کنم که اگر خواستین اینکار رو بکنین مواظب امنیت عمومی باشین که در کشور ما گاهی با قانون و عقل سلیم همخوانی نداره و همچنین قبلش با اون ایمیل مکاتبه کنین. تاکید می کنم که اگر من بودم و پنجره خوب و وقت قابل قبول داشتم حتما تست می کردم.

خاطرات زیکانف – فیلم‌های ورکشاپ موزیلا او اس و شیوه ساخت اپ

یکی از اتفاقات جالب زیکانف برای من، آشنایی با سارا بود که به عنوان نماینده موزیلا اومده بود تا یک پارتی موزیلامیکر (مثل ساندویچ میکر.. یعنی سازندگان وب) برگزار کنه و همکاری جذاب و خوب با افشین مهربانی، مهدی اصل علینژاد و رضا حبیبی برای برگزاری این ورکشاپ که با همکاری بچه‌های زیکانف در کنار کنفرانس اجرا شد. توش پنج نفر حرف زدیم:

  • من در مورد اینکه چرا موزیلا مهمه
  • سارا در مورد لوکالایزیشن، بج‌ها و پروژه خودشون توی موزیلا
  • افشین مهربانی در مورد پلاگین‌ها و ماجول‌های فایرفاکس
  • مهدی اصل علی‌نژاد درباره اچ تی ام ال پنج و کانواس‌ها
  • و در نهایت رضا حبیبی در مورد ساخت اپ‌های فایرفاکس او اس با اچ تی ام ال پنج

این قسمت اول است:

و این بقیه قسمت‌ها:

کل ویدئوهای ورکشاپ سیستم عامل موزیلا او اس از جمله روش ساخت برنامه برای این سیستم عامل جدید موبایل

به نظرم اگر بقیه رو می پیچونین، در صورتی که به فایرفاکس او اس علاقه دارین تیکه رضا حبیبی رو حتما ببینین که توش واقعا یک اپ رو نشون می ده و شیوه تست اون روی فایرفاکس رو.

شماره صفر مجله لینوکسی سلام دنیا رو دانلود کنین

magazine_small

یکی از کارهای خوبی که در جامعه گنو/لینوکسی ایران انجام شد، شروع قوی مجله لینوکسی «سلام دنیا»‌ بود؛ یک نشریه جدی که می تونه شغل آدم ها باشه. این ماجرا با کمک مالی اعضای جامعه شروع شد و بعد از جمع کردن پولی بسیار قابل توجه حالا شروع به چاپ کرده. شماره صفر مجله لینوکسی سلام دنیا رو می تونین از سایت سلام دنیا، دانلود کنین.

کاریکاتور: وقتی مشتری بالاخره مشخصات فنی APIی که قراره بوده رو می فرسته

client_api

تقدیم به دوستان عالی در آتی تل و برای سرحالی میلاد (:

منبع

سوال و جواب: برنامه نویسی اندروید رو از کجا شروع کنم

جادی عزیز سلام

میخواستم بدونم که برای نوشتن اپلیکیشن های اندروید از چه زبان برنامه نویسی استفاده میشه و کسی که هیچ زبان برنامه نویسی بلد نیست برای شروع یادگیری نوشتن اپلیکیشن های اندروید از کجا باید شروع کنه؟

ممنون بابت وبلاگ باحالت و راهنماییت
شاد باشی

خب زبون برنامه نویسی برنامه های اندروید جاوا است. باید جاوا رو یاد بگیری و بعد بری سراغ اندروید. یا می تونی عمقت تو جاوا رو کم کنی و با یاد گرفتن پایه ها وقت بیشتری رو بذاری برای اندروید ولی یادت باشه همیشه کسی بهتر یاد می گیره که تمرکزش روی پایه ها باشه. توصیه خوب اینه که اول با مفاهیم برنامه نویسی اشنا بشی، بعد جاوا رو یاد بگیری و بعد بری سراغ اندروید.

و البته چون سوال رو با ایمیل از من پرسیدی لازمه اینم بگم که گوگل بسیار قوی و مهمه… در کنار کلی کتاب و راهنما و مرکز توسعه دهندگان خود اندروید، مهمترین چیز توان سرچ در دنیای انگلیسی و گوگل است.

بهترین نقطه بعد از آشنایی با جاوا، اینجاست و اگر اهل کتابی، ورق زدن و انتخاب یک کتاب.

افزونه در پشتی جادی.نت

احمد علی شفیعی عزیز این افزونه باحال برای تبدیل کردن همه جادی.نت‌ها به درپشتی رو نوشته. اگر از گوگل کروم استفاده می کنین، هر بار که هر یو آر الی که توش jadi.net داره رو باز کنین اتوماتیک به مسیر در پشتی منتقل می شین. جذابیتش اینه که کدها روی گیت هاب هم هستن که هر پروژه ای رو بهتر می کنه (: اگر به دردتون می خوره و کروم دارین، نصب کنین و حالش رو ببرین.