2019年12月31日 星期二

Intervention Image: Save image directly from an url with original file name and ext?

$path = 'https://i.stack.imgur.com/koFpQ.png';
$filename = basename($path);

Image::make($path)->save(public_path('images/' . $filename));

from : https://stackoverflow.com/questions/32828606/intervention-image-save-image-directly-from-an-url-with-original-file-name-and

2019年11月20日 星期三

Exception/Crash discovery applicaiton

Sentry : https://sentry.io/welcome/
Crashlytics : https://firebase.google.com/products/crashlytics

VMWARE WORKSTATION AUTOFIT GUEST SETTING

I like to work with VMware Workstation , also in windowed mode and not always in full screen mode. However, since I used three different monitor resolutions for my work, I repeatedly stumble across the Autofit Guest view.
Unfortunately after a new installation of the VMware Workstation on my new laptop the Dell Latitude 7390 2-in-1 again had the problem that the setting Autofit Guest or Fit Guest Now does not work.
Each time I moved the VM Workstation window to the other monitor (which has a different resolution) or I switched from full-screen mode to windowed mode, the guest operating system was not adjusted to the new window size. It was very bad if I separated the notebook from the monitors and I only wanted to work in tablet mode. Since there was the wildest window representations in the VM guest operating system.
My solution which I found out after a few trials and not helpful internet researches:
  1. Disable the 3D Acceleration in the VM settings.
  2. Insert the line svga.autodetect = "TRUE" in the corresponding * .vmx file
  3. Change Monitors to [Use host setting for monitors]
After these two changes, the Autofit Guest mode finally works for me again.
I hope the tip can help someone.

2019年11月18日 星期一

Docker for Windows 使用 VMware WorkStation(共存)

一.前言

Docker for Windows 不同于 Docker Toolbox。Docker for Windows 对系统的要求至少为Windows 10专业版,因为它需要Hyper-V的支持,而Dockbox Toolbox使用Oracle Virtual Box而不是Hyper-V 。使用过VMware WorkStation的朋友应该知道,vm无法与hyper-v共存。那么如果我的电脑已经安装和使用VM,如何才能使用Docker for Windows呢,请看下面的讲解。

二.安装Docker for Windows

1.下载Docker for Windows

安装过程很简单,在此我就不赘述了。

2.安装以后的准备

安装完成以后,Docker for Windows 会自动运行,此时会出现提示没有启用Hyper-V,这里点击canel即可。
1526822445162

三.准备工作

1.下载boot2docker.iso

然后将 boot2docker.iso 放在 C:\Users\<用户名>\.docker\machine\machines\dev\,文件夹不存在就自己建立。

2.下载 VMware Workstation 驱动

从这里下载 https://github.com/pecigonzalo/docker-machine-vmwareworkstation/releases/ 最新版的vm驱动。此驱动非官方开发,但是也在官方的文档中有链接。
然后将 docker-machine-driver-vmwareworkstation.exe复制到 C:\Program Files\Docker\Docker\resources\bin 下:
1526822848393

四.安装Docker Machine

1.打开VMware Workstation

这一步是必须的!VM版本必须大于10。

2.安装dev示例

打开cmd,执行命令
docker-machine create --driver=vmwareworkstation dev
执行过程如下:
1526822936708

3.验证安装

执行命令:
docker-machine ls
会出现一个dev的实例
1526823011588

4.激活实例

执行命令:
docker-machine env dev
会出现如下图:
1526823114672

5.设置环境变量

打开环境变量设置,对于第3步中的提示设置系统环境变量:
1526823237336
设置这五个即可,最后记得要点确定哦。

五.验证是否安装成功

1.登录dev实例

使用命令登录:
docker-machine ssh dev
出现如下表示成功:
1526823434885

2.运行hello-world

关闭我们刚刚的cmd窗口,打开一个新的cmd窗口。执行命令:
docker run hello-world
1526823527811
到这一步我们的安装就表示成功了。

六.配置加速器

通过命令登录docker-machine
新建文件 vi /etc/docker/daemon.json
输入以下内容
{
  "registry-mirrors": ["https://registry.docker-cn.com"]
}
保存,重启即可

七.收尾工作

因为我们使用的VM,所以我们在使用docker的时候,必须保证vm的dev示例是在运行的:
1526823632970
此方法目前有个缺点,就是无法使用Docker for Windows的UI管理功能,但是这并不影响,通过命令我们可以完成所有的事情,所以我们在服务中,停止Docker for Windows Service,并且将其设为手动启动,避免每次开机就收到一个提示框。
1526823747535
最后十分感谢这个园友的文章能给我参考:https://www.cnblogs.com/VAllen/p/Docker-for-windows-on-VMware.html

from : https://www.cnblogs.com/stulzq/p/9064828.html

Window.Open only if the JavaScript window does not exist

I would do so - basically storing all referenced opened windows in the function itself. When the function fires, check if the window does not exist or has been close - from that, start the pop-up window. Otherwise, focus on the existing popup for that request.

function launchApplication(l_url, l_windowName)
{
  if ( typeof launchApplication.winRefs == 'undefined' )
  {
    launchApplication.winRefs = {};
  }
  if ( typeof launchApplication.winRefs[l_windowName] == 'undefined' || launchApplication.winRefs[l_windowName].closed )
  {
    var l_width = screen.availWidth;
    var l_height = screen.availHeight;

    var l_params = 'status=1' +
                   ',resizable=1' +
                   ',scrollbars=1' +
                   ',width=' + l_width +
                   ',height=' + l_height +
                   ',left=0' +
                   ',top=0';

    launchApplication.winRefs[l_windowName] = window.open(l_url, l_windowName, l_params);
    launchApplication.winRefs[l_windowName].moveTo(0,0);
    launchApplication.winRefs[l_windowName].resizeTo(l_width, l_height);
  } else {
    launchApplication.winRefs[l_windowName].focus()
  }
}

from : https://www.generacodice.it/es/articolo/191665/JavaScript+window.open+only+if+the+window+does+not+already+exist

2019年11月10日 星期日

Matomo

Code | Design | Innovate

Welcome to the Matomo Developer Zone (formerly Piwik), the center of innovation in analytics.

from : https://developer.matomo.org/

2019年11月6日 星期三

Find SQL fast in SQL Server Management Studio and Visual Studio

Find SQL fast in SQL Server Management Studio and Visual Studio

  • Find fragments of SQL in tables, views, stored procedures, functions, jobs, and more
  • Quickly navigate to objects wherever they happen to be on a server
  • Search across multiple object types and multiple databases
  • Find all references to an object
  • Search with booleans and wildcards

from : https://www.red-gate.com/products/sql-development/sql-search/

2019年10月25日 星期五

Sentry - Software errors are inevitable. Chaos is not.

Sentry provides open-source and hosted error monitoring that helps all software
teams discover, triage, and prioritize errors in real-time.
One million developers at over fifty thousand companies already ship
better software faster with Sentry. Won’t you join them?

from : https://sentry.io/welcome/

了解Google Data Studio是什麼?如何輕鬆幫你將資料視覺化

Google Data Studio是什麼?

你是網路行銷人嗎?是否經常需要用數據做簡報?經常煩惱該如何製作精美的報表嗎?如果你符合上面的條件,awoo在這邊推薦你可以試試Google Data Studio。
Google Data Studio是一套免費的資料視覺化工具,可以串接多種google的資料源(像是GA、GSC、YouTube數據),將數據資料自訂轉換成所想要呈現的報表、圖表,並在Google Data Studio上製作成精美的報告,對於需要將多種資料源整合分析報告的數位行銷人來說是相當好用的。
假設今天需要做一份報告展示去年度SEO、Google廣告Facebook廣告、社群經營的成效,我們就可以透過Google Data Studio 將Google Analytics、Search Console、Google Ads做串連,快速地拉出所需要的數據圖表來製作成報告。

開始使用 Google Data Studio

進入Google Data Studio 後,上方可以建立空白新報表,但如果空白報表一開始使用不知該從何做起,Google Data Studio也有內建多種資料報表的範本,例如: Search Console Report、Google Ads Overview、Google Merchandise Store,套用範本並串接對應的資料來源,就可以產生一份漂亮的報表,可以省去不少報表編排的時間。

串接資料源

在製作報表,一定要先確定報表會需要什麼樣的資料源(例: Search Console、Google Analytics),而在Google Data Studio 串接資料源可以從建立報表前或是建立報表時執行。

製作報表前

點選主介面左下方的”資料來源”進入後右下角有一個 “+”,點選之後就可以挑選加入的資料來源。

製作報表時

新增報表時,右方可以選取目前已有串接的資料來源,也可以在這時串接建立新的資料來源。
另外可以對匯入資料源的預設欄位名稱或類型做一些調整,例如 : 你可以修改欄位名稱讓欄位代表意思更好的被記憶,或是欄位數據類型的修改。

新增自訂欄位

Data Studio 還可以透過串接的資料源欄位來新增自訂欄位,可以透過資料源欄位來做一些公式設計,如下圖範例將點擊數/網站頁面數,計算出平均每個頁面帶來的點擊數的新欄位數據。

製作報表

資料源串接完成後,可以先開始試著拉出圖表完成簡易的報表,了解每種圖表的呈現方式設定或是資料的維度、指標編排。

版面主題配置

建立一個空白報表後,先設定整個大版面的設計配置,可以設定版面大小、格線、背景、文字、主題可以挑選簡單或極簡黑。

圖表類型

Data Studio 提供的圖表類型有時間序列、表格、長條圖、圓餅圖、折線圖等數十種類型的圖表可以使用。
每種圖表都可以針對細節樣式做調整,像是調整圖表顏色、數量、文字大小、字型等多種樣式調整。

資料設定

選擇好圖表類型後,挑選圖表要使用的資料來源,以及維度跟指標所要使用的欄位,一張圖表可以使用多個資料來源,例如:混合使用兩個不同的Google Analytics數據源Google文件參考:About data blending),也可以針對圖表數據自訂日期範圍或是篩選器。

自訂區塊

除了Data Studio內建的圖表外,另外也可以使用網址嵌入內容、自訂文字內容、圖片以及畫矩形或圓形在報表中。

建立Google Data Studio報表

建立報表前要先確認報表所要訴求的是什麼?是作為Dashboard可以週期性的監控所想要的數據狀況,或者是用來做一份精美簡報報告去年度網站成長狀況,再串接所需要的資料源來製作報表。
另外也可透過範本報表來熟悉Google Data Studio的報表應用,一開始更容易上手。
完成報表後,可以將此報表檢視或編輯權限分享給其他人以利於協作。
也可以將整個報表下載成PDF檔案報告使用。

如果想要針對報表中某個圖表數據更詳細了解,也可以單選某個圖表下載CSV檔案(Excel)或選擇匯出到試算表。
Google Data Studio 是一套非常方便的製作報表工具,更棒是免費使用!功能使用起來並不複雜,但要製作出一份精美好用的報表更多是看設計者的設計邏輯程度了,現在就上【Google Data Studio網站】申請試用看看吧!

from : https://www.awoo.com.tw/blog/google-data-studio/

2019年9月18日 星期三

JavaScript:使用 Array.map、Object.values 和 Object.keys 處理一連串的資料

使用 Array.mapObject.values 和 Object.keys 處理「物件中有物件」和「陣列中有物件」的情況。

物件中有物件

一個物件包含了一串物件。
範例如下,這裡有一串 ID 與名字。
{
  "1234567890": {
    id: "1234567890",
    name: "Nina Ricci",
  },
  "2345678901": {
    id: "2345678901",
    name: "Hello Kitty",
  },
  "3456789012": {
    id: "3456789012",
    name: "Pusheen the cat",
  },
}

取得 key 的陣列

在這一連串資料下取得 key 的陣列。
  • 使用 Object.keys 取得物件的鍵值,組成陣列後回傳。
const idList = Object.keys(list);

idList // ["1234567890", "2345678901", "3456789012"]

取得 value 的陣列

在這一連串資料下取得 value 之特性屬性的陣列。
  • 使用 Object.values 取得物件的 value,組成陣列。
  • 承上,使用 Array.map 將陣列中的特定屬性值取出,組成新陣列後回傳。
const nameList = Object.values(list).map(item => item.name);

nameList // ["Nina Ricci", "Hello Kitty", "Pusheen the cat"]

陣列中有物件 1

一個陣列包含了一串物件。
範例如下,這裡有一串 ID 與名字。
const list = [
  {
    id: "1234567890",
    name: "Nina Ricci",
  },
  {
    id: "2345678901",
    name: "Hello Kitty",
  },
  {
    id: "3456789012",
    name: "Pusheen the cat",
  },
];

取得特性屬性值的陣列

取得 id。
  • 使用 Array.map 迭代陣列,並將 callback 中的執行結果組成新陣列後回傳。
  • 承上,在迭代陣列過程中,使用 Object.values 取得第一個屬性值,也就是 id 的值。
const idList = list.map(item => Object.values(item)[0]); // 0 表示第一個屬性值

idList // ["1234567890", "2345678901", "3456789012"]
取得 name。
const nameList = list.map(item => Object.values(item)[1]); // 1 表示第二個屬性值

nameList // ["Nina Ricci", "Hello Kitty", "Pusheen the cat"]

陣列中有物件 2

一個陣列包含了一串物件。
範例如下,這裡有一串 ID 與名字,key 是 ID,value 是名字。
[
  {
    "1234567890": "Nina Ricci",
  },
  {
    "2345678901": "Hello Kitty",
  },
  {
    "3456789012": "Pusheen the cat",
  },
]

取得 key 的陣列

  • 使用 Array.map 迭代陣列,並將 callback 中的執行結果組成新陣列後回傳為最終結果 idList。
  • 使用 Object.keys 取得每個物件的鍵值,由於 Object.keys 會幫每個物件在取鍵值時建立一個陣列,因此要用 [0] 再取得內容,即字串後回傳結果。
const idList = list.map(item => Object.keys(item)[0]);

idList // ["1234567890", "2345678901", "3456789012"]

取得 value 的陣列

  • 使用 Array.map 迭代陣列,並將 callback 中的執行結果組成新陣列後回傳為最終結果 nameList。
  • 使用 Object.values 取得每個物件的 value,由於 Object.value 會幫每個物件在取值時建立一個陣列,因此要用 [0] 再取得內容,即字串後回傳結果。
const nameList = list.map(item => Object.values(item)[0]);

nameList // ["Nina Ricci", "Hello Kitty", "Pusheen the cat"]

from : https://cythilya.github.io/2018/06/17/array-and-object-handling/

wibiya widget