در صورتی که از مبدلهای TTL به USB استفاده میکنید ممکن است به صورت پیشفرض توسط ویندوز شناسایی نشوند؛ در این صورت میتوانید آخرین نسخههای آن را از لینکهای زیر دریافت کنید:
چطور با جاوا اسکریپت، یک svg را به صورت png دانلود کنیم؟
در یکی از پروژهها نیاز بود تا کاربر بتواند یک تصویر svg را به صورت png دانلود کند (! نیازه دیگه چه میشه کرد!😁)؛ با مقداری تحقیق و بررسی و ترکیب تعدادی کد با یکدیگر به این کد رسیدم:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
function downloadVectorAsPng(vectorName) { var mySvg = document.getElementById(vectorName); var myCanvas = document.createElement('canvas'); myCanvas.style = "display: none;"; myCanvas.width = mySvg.clientWidth*5; myCanvas.height = mySvg.clientHeight*5; document.body.appendChild(myCanvas); var ctx = myCanvas.getContext('2d'); var svgData = (new XMLSerializer()).serializeToString(mySvg); var DOMURL = window.URL || window.webkitURL || window; var img = new Image(); var svgBlob = new Blob([svgData], {type: 'image/svg+xml;charset=utf-8'}); var url = DOMURL.createObjectURL(svgBlob); img.onload = function () { ctx.fillStyle = "#fff"; ctx.fillRect(0, 0, myCanvas.width, myCanvas.height); ctx.drawImage(img, 0, 0); DOMURL.revokeObjectURL(url); var imgURI = myCanvas .toDataURL('image/png') .replace('image/png', 'image/octet-stream'); var evt = new MouseEvent('click', { view: window, bubbles: false, cancelable: true }); var a = document.createElement('a'); a.setAttribute('download', 'VectorDiagram_' + new Date().toLocaleDateString() + '.png'); a.setAttribute('href', imgURI); a.setAttribute('target', '_blank'); a.dispatchEvent(evt); }; img.src = url; } |
روش کار کد به صورت خلاصه این است که ابتدا svg در یک متغیر ذخیره شده و سپس یک canvas نامرئی ساخته میشود؛ در ادامه تصویر svg درون canvas رسم شده و در نهایت با ترفندِ ساخت لینک مخفی و کلیک مصنوعی، تصویر برای کاربر دریافت میشود.
- ابعاد canvas بر مبنای ابعاد svg تنظیم میشود. برای اینکه تصویر زیادی کوچک نباشد، عرض و ارتفاع تصویر در 5 ضرب شده است که میتوانید آن را تغییر دهید.
- برای اینکه پسزمینه تصویر نهایی نامرئی نباشد، ابتدا یک مستطیل سفید در ابعاد کل canvas رسم شده (
ctx.fillRect) و سپس تصویر svg رسم میشود.
نان و نمک
امروز مشغول کار بودیم که زنگ در رو زدن؛ یک جوانی با دو کارتن بزرگ بستنی پریما در دست وارد شد و بعد از تبریک نیمه شعبان به ما بستنی تعارف کرد. وقتی رفت فهمیدیم که از بچههای تیم ایتا بود.
شیرینیِ پیامرسان داخلی نخورده بودیم که توفیق شد. حیف شد، تازه میخواستم برایشان شمشیر از رو بکشم و نقد کنم 😂.
شبنوشت
تجربه بهم ثابت کرده که هروقت اضطراب بالایی دارم، در عین ظاهر بیتفاوت به شدت به یک منبع اطلاعات میچسبم و شروع میکنم به خوندن! و این روزا چی بهتر از فضای مجازی تا هم حالمو بدتر کنه و هم چشمامو از پا در بیاره!
موقع امتحانا که ایتا رو درو کرده بودم و امروز هم نصف حسابهای ویراستی رو از سر به ته به صورت درختی خوندم 😂. باید یه فکری به حال خودم بکنم!
اینجا مینویسم که یادم بمونه…
#پولطلا
چند وقتیه که بحث #پولطلا یا در واقع پول با پشتوانهی درست و حسابی (و نه چیزهایی مثل پول فروش نفت و اموال دولتی و نرخ تولید ناخالص ملی و…) خیلی ذهنم را مشغول کرده.
برای من که دروس اقتصاد را نخواندهام و به صورت دقیق با مباحث و نظریههای اقتصاد آشنا نیستم (که البته دانشجوهایش هم این روزا صرفا جزوههای اساتیدی را از بر میکنند که ۹۹٪ صرفا پذیرای نظریات یک طیف بودهاند)، واضح است که تا به حد لازم یا حداقل کافی از اقتصاد ندانم، نمیتوانم بگویم «کی راست میگه و کی غلط»؛ اما خب تا زمانی که دغدغهای کهنه هست، نظریات مختلف هم هست و کی به کیه ما هم نظریه بدیم 😂.
البته این که یک شوخی بود، اما مسئلهی پول بی پشتوانه و تورم و نتایج مخرب آن بر فرهنگ جامعهی مظلوم ما همیشه برای من یک سوال بود. همیشه از خودم میپرسیدم چرا نرخ تورم انقدر بالاست، چرا بانکها وامهایی با سود بالا میدهند و با اینکه میدانم ربا برای جامعه مضر (و به همین دلیل حرام) است، وقتی بارها شنیدهایم که کسی پول قرض کرده و کالایی خریده و تنها چند ماه بعد کلّی سود کرده (و طبیعتا قرض دهنده ضرر)، چطور کسی را ترغیب به قرض الحسنه کنیم و مگر انسان کاسبکار قبول میکند و در این شرایط نمیشود و این نامردی نیست که «اِن»قدر اعتبار خرید را به کسی قرض بدهیم و بعداً «اِن منهای یک»قدر اعتبار تحویل بگیریم؟ این که کمتر از اصل پول است و آیا میشود توجیه شرعی برای ربا در این پیچ حساس تاریخی درست کرد (!) و طبیعی است که نمیشود و یک جای کار میلنگد و…؛ تا اینکه روزی متوجه شدم پشتوانه پول ما طلا نیست! در واقع پشتوانه پول هیچ کشوری طلا نیست و این اتفاق حدود ۵۰-۶۰ سال پیش رخ داده و در حال حاضر چیزهای ناپایداری مثل تراز تجاری و… به عنوان پشتوانهی پول کشورها استفاده میشود که به نظرم خیلی عجیب است. بماند که چرا اینطور شد و چرا نمیشود به آن وضعیت برگشت…
…
در اینجا قصد دارم تا محتواهای مفیدی که در مورد ساخت یک واحد ارزی مفید و پایدار (بر پایه طلا و یا هر چیز ثابت دیگری) و البته متناسب با نیازهای روز دیدم را قرار دهم.
چگونه در CSS فقط به عناصر RTL استایل بدهیم؟
گاهی اوقات نیاز داریم تا در یک صفحه HTML که هم عناصر راست به چپ (RTL) و هم چپ به راست (LTR) از یک نوع وجود دارند، به هر دسته ویژگی خاصی بدهیم؛ مثلا دو جدول داریم که یکی باید از سمت راست نمایش دهد و دیگری از سمت چپ.
در این حالت میتوانیم مانند مثال زیر که برای کلاس table است، حالت خاص را در ادامهی ذکر نام Class آن عنصر ذکر کنیم:
1 2 3 4 |
[style*="direction: rtl"] .table,[style*="direction:rtl"] .table { /* style */ } |
دقت کنید که direction ممکن است به صورت “direction: rtl” و یا “direction:rtl” نوشته شود، پس نوشتن هر دو حالت برای جلوگیری از مشکل در آینده توصیه میشود (چرا واقعا خودش تشخیص نمیده؟ 😐)
انتخاب به عنوان دانشجوی فناور برتر ۱۴۰۱ دانشگاه شهاب دانش
به نقل از shdu.ac.ir:
طی جلسه ای از پژوهشگران و فناوران برتر دانشگاه شهاب دانش تقدیر شد.
در این جلسه که با حضور اعضاء هیأت رئیسه ، مدیر پژوهش ، مدیر فناوری و ارتباط با صنعت و مشاوره فناوری دانشگاه همراه بود از پژوهشگران و فناوران برتر دانشگاه شهاب دانش در سال ۱۴۰۱ تقدیر شد.
شایان ذکر است در بخش اساتید ، آقای دکتر رضا یزدانی به عنوان فناور برتر و آقای دکتر مجید رمضانی به عنوان پژوهشگر برتر برگزیده شدند.
همچنین در بخش دانشجویی آقای مهندس رستگار به عنوان فناور برتر و خانم مهندس نجف لو به عنوان پژوهشگر برتر انتخاب شدند.
در ادامه تقدیر نامه و هدایای برگزیدگان توسط ریاست ،معاون فناوری و اعضاء هیأت رئیسه به ایشان اهدا شد.
نصب داکر روی اوبونتو 22.04 LTS
همانطور که میدانید (یا شایدم نمیدانید 😐) مخزن اصلی سرویس Docker ایران و تعدادی از کشورهای دیگر را تحریم کرده و امکان نصب مستقیم از آن وجود ندارد؛ با این حال کسی با این مسخرهبازیها نمیتواند جلوی ماها را بگیرد 😂. من دو روش برای رفع این مشکل پیدا کردهام:
- استفاده از مخزنهای آینه (یا موازی یا همان Mirror): با گشتن mirrorهای سرور داکر میتوان چیزهای خوبی پیدا کرد؛ مثلا اینجا مخزن خودش را با آموزش قدم به قدم ارائه داده.
- استفاده از سرویس «شکن»: «شکن» نام یک سامانه دورزنندهی سایتهای تحریم شده است که از طریق DNS «فقط» سایتهای تحریم شده را دور زده و مثل سایتهای عادی ارائه میدهد. پیش از این یک نسخه غیررسمی برای ویندوز آن را ساخته بودم اما اینجا لینوکس است و کار به همین راحتی نیست! مخصوصا اگر رابط گرافیکیای در دسترس نباشد (مثل سرورها)…
بعد از مقداری گشتن متوجه شدم که ابزاری به نام NMTUI و NMCLI در بعضی از توزیعها (مثل اوبونتو) وجود دارد که نسبتا کار را راحت کرده.
تعویض DNS با nmtui
1- ابتدا وارد nmtui شوید:
1 |
$ sudo nmtui |
2- گزینه «Edit a connection» را انتخاب کنید:
3- اتصال موردنظر (که معمولا همان تک گزینهی زیرمجموعه Ethernetهاست) را انتخاب کنید، به سمت راست بروید و Edit را انتخاب کنید:
4- بخش «IPv4 CONFIGURATION» را «show» کنید، به بخش «DNS servers» بروید و DNSهای شکن را «Add» کنید. در نهایت از پایین صفحه «OK» را بزنید و به صفحه قبلی برگردید:
5- حالا برای اعمال تغییرات:
اگر به صورت مستقیم به دستگاه متصل هستید به صفحه اصلی برگردید و با وارد شدن به بخش «Activate a connection» و انتخاب شبکه، آن را یکبار «غیرفعال» و دوباره «فعال» کنید:
هشدار: اگر از راه دور به دستگاه وصلید، روش بالا باعث میشود که اتصال شما قطع شده و دیگر شبکهای در کار نیست که بخواهید از طریق آن، آن را وصل کنید (شنیدید میگن یکی بر سر شاخه بُن میبُرید؟ 😅)! در این حالت مرحله آخر روش nmcli را ببینید.
تعویض DNS با nmcli
1- ابتدا لیست ارتباطات شبکه را گرفته و UID شبکه مورد نظر را کپی میکنیم:
1 2 3 4 |
$ nmcli con NAME UUID TYPE DEVICE Wired connection 1 233db91b-52ae-3903-9a5e-0614092d48b7 ethernet ens33 docker0 dc5640ce-c219-4eea-8532-51328f32cf84 bridge docker0 |
2- حالا dnsهای شکن را تنظیم میکنیم:
1 |
$ sudo nmcli con mod _DEVICE_NAME ipv4.dns "178.22.122.100 185.51.200.2" |
3- میتوانیم دریافت dns خودکار را خاموش کنیم (برای من خیلی فرقی نداشت):
1 |
$ sudo nmcli con mod _DEVICE_NAME ipv4.ignore-auto-dns yes |
4- حالا باید شبکه را خاموش و دوباره روشن کنیم. برای اینکه به مشکل قبل نخوریم میتوانیم از دستور زیر استفاده کنیم:
1 |
$ sudo nmcli device disconnect _DEVICE_NAME; wait ; sudo nmcli device connect _DEVICE_NAME |
یا از طریق دستور زیر شبکه را ریست میکنیم:
1 |
$ sudo service NetworkManager restart |
ارتباط SSH قطع شده و بعد از چند ثانیه دوباره قادر به ارتباط خواهیم بود…
برای اطمینان از تنظیم DNS، میتوان دستور زیر را اجرا کرد:
1 |
$ resolvectl status |
گل درشت
درختی که آخر شهریور کاشتند، امروز میوهای گلدرشت داد…
پ.ن: مطمئنم چند سال دیگر هیچکس نمیداند امروز چه اتفاقی افتاد.
تبدیل متن به هش کد MD5 در جاوااسکریپت
گاهی اوقات لازم داریم تا متغیرهای ورودی در یک فرم را کمی دستکاری کنیم؛ مثلا رمز عبور دریافتی از کاربر را تبدیل به یک رمز برگشتناپذیر کنیم که MD5 یکی از معروفترین آنهاست. جاوا اسکریپت به صورت پیشفرض دستوری برای این کار ندارد اما با افزودن این تابع به کدها میتوانید این قابلیت را اضافه کنید:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
function md5(inputString) { var hc="0123456789abcdef"; function rh(n) {var j,s="";for(j=0;j<=3;j++) s+=hc.charAt((n>>(j*8+4))&0x0F)+hc.charAt((n>>(j*8))&0x0F);return s;} function ad(x,y) {var l=(x&0xFFFF)+(y&0xFFFF);var m=(x>>16)+(y>>16)+(l>>16);return (m<<16)|(l&0xFFFF);} function rl(n,c) {return (n<<c)|(n>>>(32-c));} function cm(q,a,b,x,s,t) {return ad(rl(ad(ad(a,q),ad(x,t)),s),b);} function ff(a,b,c,d,x,s,t) {return cm((b&c)|((~b)&d),a,b,x,s,t);} function gg(a,b,c,d,x,s,t) {return cm((b&d)|(c&(~d)),a,b,x,s,t);} function hh(a,b,c,d,x,s,t) {return cm(b^c^d,a,b,x,s,t);} function ii(a,b,c,d,x,s,t) {return cm(c^(b|(~d)),a,b,x,s,t);} function sb(x) { var i;var nblk=((x.length+8)>>6)+1;var blks=new Array(nblk*16);for(i=0;i<nblk*16;i++) blks[i]=0; for(i=0;i<x.length;i++) blks[i>>2]|=x.charCodeAt(i)<<((i%4)*8); blks[i>>2]|=0x80<<((i%4)*8);blks[nblk*16-2]=x.length*8;return blks; } var i,x=sb(inputString),a=1732584193,b=-271733879,c=-1732584194,d=271733878,olda,oldb,oldc,oldd; for(i=0;i<x.length;i+=16) {olda=a;oldb=b;oldc=c;oldd=d; a=ff(a,b,c,d,x[i+ 0], 7, -680876936);d=ff(d,a,b,c,x[i+ 1],12, -389564586);c=ff(c,d,a,b,x[i+ 2],17, 606105819); b=ff(b,c,d,a,x[i+ 3],22,-1044525330);a=ff(a,b,c,d,x[i+ 4], 7, -176418897);d=ff(d,a,b,c,x[i+ 5],12, 1200080426); c=ff(c,d,a,b,x[i+ 6],17,-1473231341);b=ff(b,c,d,a,x[i+ 7],22, -45705983);a=ff(a,b,c,d,x[i+ 8], 7, 1770035416); d=ff(d,a,b,c,x[i+ 9],12,-1958414417);c=ff(c,d,a,b,x[i+10],17, -42063);b=ff(b,c,d,a,x[i+11],22,-1990404162); a=ff(a,b,c,d,x[i+12], 7, 1804603682);d=ff(d,a,b,c,x[i+13],12, -40341101);c=ff(c,d,a,b,x[i+14],17,-1502002290); b=ff(b,c,d,a,x[i+15],22, 1236535329);a=gg(a,b,c,d,x[i+ 1], 5, -165796510);d=gg(d,a,b,c,x[i+ 6], 9,-1069501632); c=gg(c,d,a,b,x[i+11],14, 643717713);b=gg(b,c,d,a,x[i+ 0],20, -373897302);a=gg(a,b,c,d,x[i+ 5], 5, -701558691); d=gg(d,a,b,c,x[i+10], 9, 38016083);c=gg(c,d,a,b,x[i+15],14, -660478335);b=gg(b,c,d,a,x[i+ 4],20, -405537848); a=gg(a,b,c,d,x[i+ 9], 5, 568446438);d=gg(d,a,b,c,x[i+14], 9,-1019803690);c=gg(c,d,a,b,x[i+ 3],14, -187363961); b=gg(b,c,d,a,x[i+ 8],20, 1163531501);a=gg(a,b,c,d,x[i+13], 5,-1444681467);d=gg(d,a,b,c,x[i+ 2], 9, -51403784); c=gg(c,d,a,b,x[i+ 7],14, 1735328473);b=gg(b,c,d,a,x[i+12],20,-1926607734);a=hh(a,b,c,d,x[i+ 5], 4, -378558); d=hh(d,a,b,c,x[i+ 8],11,-2022574463);c=hh(c,d,a,b,x[i+11],16, 1839030562);b=hh(b,c,d,a,x[i+14],23, -35309556); a=hh(a,b,c,d,x[i+ 1], 4,-1530992060);d=hh(d,a,b,c,x[i+ 4],11, 1272893353);c=hh(c,d,a,b,x[i+ 7],16, -155497632); b=hh(b,c,d,a,x[i+10],23,-1094730640);a=hh(a,b,c,d,x[i+13], 4, 681279174);d=hh(d,a,b,c,x[i+ 0],11, -358537222); c=hh(c,d,a,b,x[i+ 3],16, -722521979);b=hh(b,c,d,a,x[i+ 6],23, 76029189);a=hh(a,b,c,d,x[i+ 9], 4, -640364487); d=hh(d,a,b,c,x[i+12],11, -421815835);c=hh(c,d,a,b,x[i+15],16, 530742520);b=hh(b,c,d,a,x[i+ 2],23, -995338651); a=ii(a,b,c,d,x[i+ 0], 6, -198630844);d=ii(d,a,b,c,x[i+ 7],10, 1126891415);c=ii(c,d,a,b,x[i+14],15,-1416354905); b=ii(b,c,d,a,x[i+ 5],21, -57434055);a=ii(a,b,c,d,x[i+12], 6, 1700485571);d=ii(d,a,b,c,x[i+ 3],10,-1894986606); c=ii(c,d,a,b,x[i+10],15, -1051523);b=ii(b,c,d,a,x[i+ 1],21,-2054922799);a=ii(a,b,c,d,x[i+ 8], 6, 1873313359); d=ii(d,a,b,c,x[i+15],10, -30611744);c=ii(c,d,a,b,x[i+ 6],15,-1560198380);b=ii(b,c,d,a,x[i+13],21, 1309151649); a=ii(a,b,c,d,x[i+ 4], 6, -145523070);d=ii(d,a,b,c,x[i+11],10,-1120210379);c=ii(c,d,a,b,x[i+ 2],15, 718787259); b=ii(b,c,d,a,x[i+ 9],21, -343485551);a=ad(a,olda);b=ad(b,oldb);c=ad(c,oldc);d=ad(d,oldd); } return rh(a)+rh(b)+rh(c)+rh(d); } |