有用功: OSX的键盘符号

用OSX时间长了,对OSX里面的各种键盘符号已经了然于心了,至少在很长一段时间,我自己是这么认为的。

今天用Xcode,无意中看到了这样的一个热键组合:

我瞬间崩溃了:这个到底是TM什么鬼,从来没见过啊?苹果真的给每个键都画了个符号吗?这不会是opt+xxx按出来的吧?

虽然这东西这么奇葩,见过一次,估计这辈子都忘不了了, 但是总得见第一次。于是便把这个表留下了,顺便把HHKB的键位也补上了。

符号 名称 缩写 HHKB
/ command cmd  ◇/
control ctrl  Control
option opt  Opt/Alt
shift shft  Shift
caps lock  

 fn+Tab

esc    Esc
eject    fn+f
delete del Delete/fn+Delete
forward delete   fn+Del
return   Return
enter    fn+Return(至少键盘上这样写的)
tab    Tab
back-tab   shift+tab
page up  

fn+l

page down   fn+.
↖︎ home   fn+k
↘︎ end   fn+,
fn function   fn

 

 BTW,如果要打出这些符号,在可以输入的地方按⇧+⌘+Space,就可以调出符号输入窗,在技术那一栏(⌘)里。

Safari地址栏直接启动百度搜索失败的修复

症见:

1. 默认搜索引擎设置为百度

2. 在地址栏里直接输入搜索内容,按回车后,没有反应。

 

解决办法:

1. 在地址栏里随便输入点儿东西,例如“papi酱”,别着急按回车;

2. 按cmd+return,这时应该会打开一个新的tab显示safari默认搜索引擎(百度)的结果;

3. 打开safari的preference,清除cookie

 

一些猜测:

如果按照上述过程,解决了问题:

1. 那可能是百度的cookie处理过程出问题了(或者cookie更新了),造成safari的请求处理失败;

2. 直接用step 3应该就能解决问题,不过,有人尝试说不成功。可能是Safari保存cookie的问题;

如果上述过程没有解决问题,可能要考虑如下cookie劫持的可能性:

1. 确保host没有被篡改,查看一下;

2. 确保DNS没有被劫持,换个“8.8.8.8”之类的。

Numbers 制作弹出列表

例如,想要制作这样一个列表,金额数目为¥10,¥20,……¥200的弹出式菜单:

image

首先,有张空白的表,在表格中填入弹出式菜单的数据选项,这里就是: 10,20,30,40……200:

image

选中金额的内容部分(不要包含标题),选定单元格的内容的格式,这里我们选择货币。

image

在制作弹出式菜单前,单元格内容的格式要先设定好。
然后,再次选中这些将要出现在弹出式菜单中的数据,选择单元格格式,选择弹出式菜单。

image

这时,可以发现这些数字已经添加到弹出式菜单的选项栏目里了。

接下来,我们可以除了第一个数据以外的其他数据删掉,重新选择这些单元格,然后,选择单元格格式,选择弹出菜单。这时候,这些单元格就被清空,并且可以利用弹出式菜单填写了。其实,你不做这步,这些单元格也是可以直接用了,强迫症作祟。

image

 

至于为什么要留第一个数据,其实,留哪个都一样,目的就是将这个自定义的弹出式菜单的格式保存下来。

A fast method to delete every entry in the iMessage

Well, clean the iMessage conversation list was very painful to me, since even with the Cmd+Delete shortcut, I had to press enter to confirm the deletion every time when a conversation entry was about to delete.

 

Here comes the cure:

select the top most message entry that you want to start deletion,

hold opt+cmd

press delete again and again and again…….

No more pop-up confirmation, you just delete them one after one, directly.

 

COOL!

动手玩:OSX下配置基于RTL的SDR

背景

SDR

Softwear Defined Radio(软件无线电)并不是一个全新的概念,摘句百度百科上通俗的概括:“软件无线电利用现代化软件来操纵、控制传统的“纯硬件电路”的无线通信技术。其重要价值在于:传统的硬件无线电通信设备只是作为无线通信的基本平台,而许多的通信功能则是由软件来实现,打破了有史以来设备的通信功能的实现仅仅依赖于硬件发展的格局。软件无线电技术的出现是通信领域继固定通信到移动通信,模拟通信到数字通信之后第三次革命。” SDR是不是数字通信革命的方向,会不会带来深远的影响,这些并不是这次讨论的主题(一家之言也没有什么意义)。这次,我们只把目光放在眼前,从兴趣出发,该怎么调戏SDR呢?

提问时间:RTL是个什么鬼?

“RTL”或者“RTL-SDR”是一个统称,泛指基于Realtek RTL2932U芯片的数字电视接收机(也就是俗称的电视棒)。这套设备除了包含了一整套可用于开发SDR的硬件(射频调谐器、ADC、USB界面),最大的特点就是“便宜”。在某宝上,算上天线,一整套设备下来也就几十人刀。再加上相关软件基本都是开源,也就是说,基本上一顿饭钱,就可以开搞了。 image

必须要说明的是:这套设备只含接收机,不能发射信号(能发射的话,估计就离被请去喝茶不远了 XD)

相比开源SDR中的另外两位重量级全功能(带收发,FPGA)选手:动辄几K美刀的USRP、虽说便宜但是也一二百美刀的HackRF,RTL以其实用的功能、相当于白送的价格,以及几乎完全没有法律风险,成为了入门或者廉价SDR的代名词。

关于RTL-SDR怎么被兴起的,先来个大家喜闻乐见的说书版本:“一天某大牛买了这款电视棒,想在linux下看看动作片,然而官方只有Windows版本的驱动,心急火燎的他便开始着手编写linux下的电视棒驱动,过程中发现这款电视棒允许原始I/O采样的传输,可用于DAB/DAB+/FM解调。于是他拉起裤子,开始了进一步的研究…”+。本着严谨的态度,这里再补个半官方(因为开源,压根儿就没有官方)的说法++:RTL2382U芯片组和相关产本的设计初衷本来就是用来实现SDR,只不过在发布的时候是和闭源的应用捆绑在一起(Windows版本嘛),所以各种牛比的潜能都算是被雪藏了在相对简单的DVB+ 以及FM应用程序里面了。这一切直到Eric Fry(就是上文提到那个火急火燎的大牛同学)通过嗅探USB接口上的数据包,发现了RTL2382U的潜力:这家伙直接吐IQ支路数据流啊!于是Eric开始着手写RTL2382U的Linux驱动,算是点燃了第一支火把,后来Realtek公司也陆续放出了一些alpha版的Linux软件(FM、DVB什么的),然后生产E4000系列协调器(最高可以扫到2.2GHz频段的廉价神器,国内LTE频段自然没问题啦)和配套SDR产品的Osmocom公司、各种大牛也陆续搀和进来,然后Boooom,RTL-SDR火了!

关于OSX

那么,关OSX什么鸟事儿呢? 这……因为我用的是苹果。(别打,别打)其实,比较现实的原因是,现有的关于RTL开源软件的开发、配置和使用绝大多数都是针对*niux。虽然苹果也算是准Linux,但是,从开发的角度看,各种库的使用是有差别的,这就造成了在Linux下行得通,在OSX下就不能简单的“如法炮制”了,需要自己tweak。

硬件配置

首先,请出我们的主角:寨都产电视棒(居然还有牌子:德国坦克)+2.5dB天线套装+ MCX-SMA转接器:

image

转接器还是必须得,市面上的天线普遍都是SMA接口的,而电视棒一般是MCX接口,所以,为了能换天线,这个东西最好还是来一个。

接起来是这个样子。天线下面带有磁铁,方便室外固定,不过在桌子上,还是请来个扶天线的助理吧。

image

硬件部分就完成了,simple吧。接下来开始搞软件部分的配置。

实验项目

SDR,软件几乎决定了一切功能。那么这次实验做点儿啥呢?FM收音?适合给通原当实验,以后有时间可以温习一下;DVB-T太欢乐了;Tracking airplane?不错,不过这个留给以后专门介绍ADS-B系统时候用吧;GSM信号分析…..分析可以,cracking可不行,原因你懂的(算了,还是郑重声明一下:破解不属于你的GSM信号是一种严重的违法行为,这里也不会涉及这方面的内容,也再一次郑重地劝你不要尝试,后果自负)。通过GSM信号分析,可以看看GSM频带的频谱长啥样,在空口抓个包,新鲜新鲜,貌似难度适中,也挺能说明SDR的能力,就它了!

GSM广播信号抓取和处理

实验所需的软件清单如下:

1.Kalibrate:用来找GSM基站并校准; 2.gqrx:手工调整、确定RTL的工作频点; 3.gr-gsm:基带数据就靠它解码了 4.wireshark:数据包成形和分析

你也许会好奇,GNURadio呢?这个马上就会说到。

先说句题外话,OSX是一套很好用的系统,好用体现在集成度非常高,日常用得到的,基本上苹果都给你想到了,连开发这种很detail的事情,也大包大揽,给你准备好了。往好处想,一般来说,80%甚至更高的需求都满足了,东西拿来就能用,妥妥地生产力工具。但是剩下的那20%,特别是编译开源软件这块儿,那可就要费点儿周折了。但是,好在天无绝人之路,找到了门路,想解决还是可能的。

好了,说具体的,step-by-step。

软件安装

我们首先需要的是macport(https://www.macports.org),有了它,刚才提到的20%的困难中,90%的问题都可以迎刃而解。先别随便调高难度想全都自己来,留点体力解决剩下的问题。也别问我是怎么知道这些的,那全是不堪回首地血泪史啊T_T。 macport是一个包理器,类似于linux下的apt,只要是macport库里面有的软件包,它可以自动帮你解决掉各种依存关系和问题,版本升级也顺带手全解决了。需要了解的命令就两条:

看看macport的库里有没有PACKAGENAME这个包:

port search PACKAGENAME 

装:

port install PACKAGENAME 

通过macport安装的最重要的软件就是gqrx。

port install gqrx 

因为根据依存关系,在安装gqrx的时候,会把GNURadio以及RTL驱动等等各种乱七八糟的玩意儿全搞定,一句话全部搞定多省事儿。还是那句话:这块儿别自己瞎折腾,万里长征第一步,别刚出门就把脚崴了。这时候,你可以去喝杯咖啡,或者看个书啥的,因为需要安装、编译很多很多软件,gqrx的安装过程可能需要持续将近1小时(基于13-Late MBP,要是更老的Macbook,时间更久),注意,别把自家网络带宽耗尽,安装过程需要下载的。

安装完成后,Launchpad中应该增加了一组东西,接上RTL-SDR和天线,启动gqrx,我们已经可以做一些事情了,例如看看功率谱,听听收音机什么的。

我们暂且把注意力拉回来,继续搞其他软件。gqrx的安装过程看似极其简单,实乃拜macport所赐。但是macport高度自动化的代价就是和系统配置存在冲突。由于OSX本身已经预装了python,而在macport里面根据依存关系,在安装GNURadio德国程中也会安装python2.7,用此macport会把自己的python安装到 /opt/local目录下面。

这时相当于同时存在两个python环境,一套是在/usr/bin,对应的库在/usr/local下面;另一套全在/opt/local下面,这两套python环境之间是默认情况下是独立的。(这也是macport设计的初衷:自成体系,既保护系统也稀释自身也不受系统约束)。

这一点区别在编译连接的过程中至关重要:要想在编译中使用macport提供的软件包,必须要用macport的python环境。而在默认情况下,使用的却是系统的python环境。

如果所有的软件都有如gqrx一般,能够通过macport来搞,问题就简单了。遗憾的事,no way。在更加广阔的开源世界里,还要靠我们自己丰衣足食。不过有了上面这个基本认识,接下来的工作就相对容易理解了。

安装kalibrate

首先到Github上clone下来kalibrate的源码。如果你用的是Linux,可以从https://github.com/steve-m/kalibrate-rtl.git上获取:

git clone https://github.com/steve-m/kalibrate-rtl.git 

如果你用的是OSX,建议从我的这个源下载,里面去掉了OSX没有的库,这样在编译连接的时候,不会报错。

git clone https://github.com/zhao414/kalibrate-rtl.git 

编译安装过程:

cd kalibrate-rtl 
mkdir build 
./bootstrap 
cd build 
../configure 
make && sudo make install 

安装完成后,可执行文件在/usr/local/bin下。如果你想安装在别处可通过如下方式安装到/YOUR/PATH/bin目录下

../configure --prefix=/YOUR/PATH 

安装完成后,试一下:

$ kal error: must enter channel or frequency kalibrate v0.4.1-rtl, Copyright (c) 2010, Joshua Lackey modified for use with rtl-sdr devices, Copyright (c) 2012, Steve Markgraf Usage: GSM Base Station Scan: kal <-s band indicator> [options] Clock Offset Calculation: kal <-f frequency | -c channel> [options] Where options are: -s band to scan (GSM850, GSM-R, GSM900, EGSM, DCS, PCS) -f frequency of nearby GSM base station -c channel of nearby GSM base station -b band indicator (GSM850, GSM-R, GSM900, EGSM, DCS, PCS) -g gain in dB -d rtl-sdr device index -e initial frequency error in ppm -v verbose -D enable debug messages -h help 

出现kal的帮助信息就算OK了。

GR-GSM的安装

接下来要安装的是GSM信号的基带解调软件。在这个部分,我们其实有两个选择:

1.Air-Probe

2.GR-GSM

Air-Probe是最早提供GSM基带信号解调译码的工具,有年头了。从Github上的更新来看,上次更新还是在2013年。老不代表不能用,只是兼容性可能不太好,我反正是尝试了N多种方法,尝试了很多种配置方法,最后还是没有在OSX下跑起来,遂放弃。如果想要尝试,请自行放狗,满大街都是。

GR-GSM是目前仍然活跃的开源项目,上次更新是在2015年9月,目前支持USRP,HackRF以及RTL。默认支持GNURadio 3.6,加了补丁可以支持到3.7(也就是说,使用3.7也可以编译通过)。所以这里我们就用它了。

我安装GR-GSM的过程是很曲折和漫长的,当然,你就不用走那么多弯路了,step-by-step。

首先是准备工作:更新系统的G

接下来安装libosmocore。下载libosmocore。

git clone git.osmocom.org/libosmocore.git 

安装过程:

cd libosmocore aclocal autoheader autoconf glibtoolize mkdir build cd build ../configure make && sudo make install 

为了简化配置过程,下载这个use_macports.sh:

git clone https://gist.github.com/34b4bec84c3eeb2bcc8e.git cd 34b4bec84c3eeb2bcc8e chmod +x use_macports.sh sudo mv use_macports.sh /usr/bin/use_macports cd .. && rm -r 34b4bec84c3eeb2bcc8e 

墙内https访问如果有困难,可以直接到网页上去copy。 然后,就可以安装GR-GSM了。

git clone https://github.com/ptrkrysik/gr-gsm.git cd gr-gsm mkdir build && cd build use_macports cmake .. ./configure make && sudo make install 

接上RTL,输入如下命令:

airprobe_rtlsdr.py 

能正常运行,GR-GSM就装好了。

安装wireshark

这个部分最简单,标准的osx软件安装过程,软件从wireshark官网下载(dmg文件),安装好后,按照运行时的说明,(如果需要)下载安装XQuartz就完事儿了,和前面的比起来,毫无难度。

一些安装编译过程的补完
  1. 虽然自己编译的软件放在/opt/local比放在/usr/local更合理一些,为了运行时减少出错的概率,有洁癖的同学还是放弃/opt/local吧,搁在/usr/local会省掉很多很多很多解决稀奇古怪问题的时间;
  2. 如果make的过程中编译错误,请用新版的GCC(如5.2.0)。装个软件还要先更新系统的GCC,感觉好像挖了OSX大厦的地基一样有没有!?其实这一步早就应该做,原因很简单:新版的GCC支持(认识)C++ V11 or later中的很多new features。之所以叫New Feature,是因为在以前的C++版本(或者说老的GCC)中,编译器可是会把这些feature当做问题来看待,会导致很“堂而皇之”的error和warning,也就是你看着error log觉得:GCC说得对啊,这个代码怎么可以这么写,作者脑袋进水了吗?然后查了新的标准之后,发现其实SB的是自己,带着一脑子文物级的知识用着一个古董编译器还觉得挺美。更新GCC的过程请按照这里来进行,大约需要20-40分钟,约2G硬盘。
  3. 关于cmake,对于要使用cmake编译的软件,一个非常好的习惯是建个build目录,并按照gr-gsm部分介绍的方法运行cmake,因为(至少)在编译器配置的部分,cmake是一锤子买卖,第一次运行时加了参数,就配死了,改不了(看起来可以,实际不起作用)。因此,用build目录,如果cmake配错了,直接删掉整个build目录,再重建一个就可以重配了。

进行实验

最喜欢这个部分了,因为有很多可看的。

首先用Kalibrate来扫GSM基站的频点、频偏和时钟误差。

kal -s 900 

由于我的硬件只支持到1.7GHz,所以只需要扫900MHz左右的频点就够了。

$ kal -s 900 Found 1 device(s): 0: Generic RTL2832U OEM Using device 0: Generic RTL2832U OEM Found Rafael Micro R820T tuner Exact sample rate is: 270833.002142 Hz [R82XX] PLL not locked! kal: Scanning for GSM-900 base stations. GSM-900: chan: 23 (939.6MHz + 25.439kHz) power: 772914.49 chan: 33 (941.6MHz + 25.679kHz) power: 489086.24 chan: 93 (953.6MHz + 24.714kHz) power: 159716.51 chan: 107 (956.4MHz + 25.206kHz) power: 273868.08 chan: 110 (957.0MHz + 24.866kHz) power: 252722.96 

可以看出信道23的功率最强。我们就挑这个信道了。接下来,测量一下信道23的频偏和时钟offset。

$ kal -c 23 Found 1 device(s): 0: Generic RTL2832U OEM Using device 0: Generic RTL2832U OEM Found Rafael Micro R820T tuner Exact sample rate is: 270833.002142 Hz [R82XX] PLL not locked! kal: Calculating clock frequency offset. Using GSM-900 channel 23 (939.6MHz) average [min, max] (range, stddev) + 28.099kHz [28042, 28147] (105, 28.366884) overruns: 0 not found: 5 average absolute error: -29.905 ppm 

接下来,用gqrx看一下GSM信号,也是为了确认一下频偏。

image

一个需要说明的地方就是,其实,信号强的地方GSM的信号频谱可以是这样的:

image

今天测试的地方比较背,所以将就啦。可以看到实际(显示)的频点位置大约在240.6MHz,大约比信道23的理论值偏差了1MHz左右。这可能是RTL硬件的误差。Whatever,接下来的工作以这个为基础进行。

打开GR-GSM

airprobe_rtlsdr 

在GUI里,按照刚才获得的频点、ppm进行调整。这时,在终端中已经可以看到有数据源源不断地解出来了。

image

这时,打开wireshark,监听localhost端口的GSMTAP标签的数据,就可以看到包信息了。

image

image

至此,实验结束。

其他有趣的项目

SDR还有很多其他有趣的开源项目,除了前面提到的收音机、tracking 航班,还有一堆好玩儿的东西,这里截个部分项目的列表,就不一一介绍了,感兴趣的童鞋请参考这里这里

image

除此之外,还有三个关于RTL-SDR的大站可以供学习参考:

 


2016-Nov-11

后记:

本文作为原始稿件,准备出版时,编辑语重心长地写下了如下的修改意见:

请商量一下:这部分内容实在是太口语化了,而且出现了很多禁用的语言还涉及告诉读者如何盗版、如何翻墙的东西,总编签字的时候要看到这部分,肯定这一本书就不让出版了。大话是本书特色,但还请尽量少用网络用语、少用口语,尽量用通而不俗的语言,若作者坚持还要放这部分内容在书中,请好好改一下,编辑只看完了第一个动手玩,把一些感觉有问题的句子和太过于口语化的语言批注出来了,请好好修改一下,不要只把批注出来的东西删掉,多谢!

看到之后,非常开心,因为标红的那几个地方,确实是我写这篇稿子时候非常想要达到的状态,看来编辑同志已经心(nei)领(xin)神(beng)会(kui)了,哈哈哈。

虽然最讨厌假模假式,但是,“通而不俗”确实是值得挑战和玩味的部分,要好好修改。

取消苹果的订阅服务

事情是这样的,之前使用Evernote的时候,服务费在app内购中完成,因此就多了一个选项,通过iTunes进行完成每年的订阅renewal,自动扣费。

不过,最近发现了一件坑爹的事情:印象笔记现在的官网的年费已经降下来了,但是iTunes上还是N年以前的老价格,里外里一年多了一倍的价格(哭死。。。),果断退订iTunes的renewal,免得哪天忘了这茬儿又给直接扣费了。

但是,如何退订iTunes中的订阅服务呢?

查了一下,原来iTunes中的订阅服务并不是在iTunes Store中完成的(汗…….),而是在Apple ID的设置中完成的。

对于ios系统:

设置->iTunes Store 和 App Store->点Apple ID->查看Apple ID->订阅管理

对于OSX系统:

方法1:打开iTunes->商店菜单->显示账户->下滚到设置->找到订阅管理

方法2:打开iTunes->点击面板中的账户图标->账户信息->下滚到设置->找到订阅管理

 

把不需要再自动订阅的项目的自动订阅开关关上就可以了。

 

PC、OSX、IOS上的具体操作方法参考:

https://support.apple.com/en-us/HT202039

虚惊一场: 重装Parallel Tools

上午,突然之间Parallels上装的Win 7 虚拟机不能正常打印文件了,也不能进入融合模式。

因为虚拟机仍然能够运行,从新配了下虚拟机的打印机共享,无果。初步分析,应该是虚拟机和Mac之间的联系出了问题。最简单的方法应该就是重装Parallel Tools。

于是,进入“操作”菜单,选择重装“Parallels Tools”……..咦,居然没有反应。关了防火墙,关了360,再试。还没反应。卸载PD,重启win7 再试,还不行。

由于PD 用的是正版,上帝意识突然出现,心中一股无名的怨气上来,真想派一万只草泥马逮个客服来好好发发牢骚:PD这一年升一次级交一回钱还出现这种低级问题,what are you 弄啥嘞!

———

嘛,勤劳的上帝都是自己解决问题哒。

———

安装Parallels Tools的正确姿势:去他的菜单吧,直接找安装文件自己来。

1. 卸载掉原来的Parallels Tools,重启win7 虚拟机

2. Parallels Tools的安装文件就在“计算机”中的虚拟光驱里。

3. 装完重启,一切问题解决。

P民意识突然出现,心中一股无名的感动:瞧人家这软件做的,重装一下全解决了,连配置都省了,PD这一年升一次级交一回钱,还真是物有所值啊。

 

贱~~~~~~~

OS X + Emacs + TeX

单说每一样,无论是Mac 还是Emacs还是TeX,用的人都不算少,但是三者的交集里的用户数量就没有那么多了,至少中文用户不是那么多。出了问题,容易抓瞎。

这个Post解决的问题包括显性和隐性两部分。显性的问题包括TeX的各种命令在Emacs里无法找到,eg: xelatex is not found之类。隐性的问题则是eps不能正常显示。

准备: TeX 起码要是2012及以后的发型版本,MacTeX应该是一般人的选择。 Emacs for Mac选择较新的版本,AucTeX用最新版(例如 现在的11.88),AucTeX建议用傻瓜方式安装,也即用Emacs的包管理器安装,可以省去很多不必要的配置(题外话,老版AucTeX升级的话,建议看看新版说明,至少.emacs中不用加载auctex.el了,preview-latex.el也不要用了。

这三样做完以后,可以负责任的说,现在已经不缺其他东西了,剩下的就是Tweak。

我这里只提及一个:Emacs for Mac的PATH环境变量。

Emacs.app,就是你在OSX 图形界面里启动的那个Emacs并不是沿用系统的环境变量,至少不是全部沿用。这就造成如果没有单独配置的话,在Terminal红执行的好好的命令在Emacs中只会悄悄地挂掉。 在Emacs中通过M-x getenv 可以获得当前的Emacs.app的环境变量。 例如 在互动模式里M-x,getenv PATH。

在PATH里需要确认两个路径是否存在 /usr/texbin以及/usr/local/bin

第一个路径是TeX可执行命令目录的符号链接,在2011之后的MacTeX都会创建这个符号链接。把它加到Emacs的环境变量里,是确保Emacs可以直接调用TeX相关的命令。

第二个路径也是一些可执行程序(command),和eps,ps,pdf等图片格式转换相关的命令,有一部分在这里(另一部分在/usr/texbin和/usr/bin里)。增加这个路径是保证对图片的支持。一些莫名其妙的TeX或者AucTeX内部函数的错误,有可能就是这些命令无法执行造成的。Anyway,我们把这个路径也补上。

添加这两个环境变量的方法,是在.emacs里增加如下内容:

(setenv “PATH”
(concat (getenv “PATH”) “:/usr/texbin:/usr/local/bin”))

注意中间那个是冒号”:”。

Hope this could help.