英国雷迪RD1000非金属管线探测仪

TP-Link WR703N升级64M内存+外接SMA天线+刷OpenWRT

TP-Link WR703N升级64M内存+外接SMA天线+刷OpenWRT(1)硬件介绍

这一系列博客主要涉及以下内容:

1、硬件升级改造

2、配置openwrt

3、挂载U盘EXTROOT

4、Goagent,你懂的

5、挂载摄像头

6、USB声卡

7、WR703N超频

8、与Arduino的应用

……还有很多应用,主要看业余时间了……

 

去年TP-Link WR703N 3G无线路由器刚推出来时,俺就马上买了一台,家用、出差带着确实很方便。因为这个路由采用了AR9331的方案,所以网上有很多对其进行改造刷机的文章。通过改造,这个小路由器可以当作BT机、网络摄像头、声卡…………

最近想对这个名片大小的路由器改造一番,以便充分挖掘这个小东西的潜力。从网上查了一下。TP的马甲水星的迅捷都有一样的产品。它们的硬件设计完全一样,只是外观及界面和品牌不同。关键是TP马甲的价格要便宜一些。于是从网上选了水星的MW151RM3G路由器。

到手之后,连电都没加,马上拆开外壳。水星的这个3G路由器外壳要比703N好拆很多。

上面的图是水星MW151RM3G路由器的正反面PCB电路板。从图中可看到,路由器的版本是V1.1的。

这个路由器的内存,DDR的,容量是32MB

 

4MB Flash ROM。启动程序存在这里面。

 

Atheros的AR9331-AL1A处理器。主频400MHz

水星MW151RM3G路由器与TP-Link WR703N路由器的硬件基本是一模一样的。要想充分发挥这个路由器的潜质,网上硬件改的主要是从这几个方面着手:

1、升级原有的4MB SPI FLASH,可以升级到8MB,更大的Flash容量可以使Flash里装更多的程序;

2、升级RAM,从32MB升级到64MB。这样在带更多客户端时,CPU的压力会减小很多;

3、引出TTL针脚,可以通过TTL刷机或通过TTL与更多的硬件连接,完成别的应用;

4、AR9331 超频。主要是通过重新编译OpenWRT代码来实现。超频幅度很可观;

5、引出SMA天线插座。外接天线,可以在一定程度上扩大这个路由器的无线覆盖范围;

6、外扩USB HUB芯片,通过自带的USB接口,再加上USB HUB芯片,可以扩充这个路由器的USB接口数量,以便同时接更多的USB外设。这个功能也可以通过直接外接成品USB HUB来实现。USB接口丰富之后,可以接更多的USB设备,以完成更多的功能,如脱机下载、网络监控等。

 

硬件改造主要是上面六点。而在扩充内存、挂接EXTROOT之后,这个路由器就可能通过安装不同的软件,来实现更多功能。

 

TP-Link WR703N升级64M内存+外接SMA天线+刷OpenWRT(2)升级内存

一开始,是要先升级8M SPI FLASH和64MB DDR内存。

升级之前,当然要先做些功能。要查一下什么样的颗粒才是适合这个路由器的。DDR内存的型号可以在这里查到:http://wiki.openwrt.org/toh/tp-link/tl-wr703n.默认使用DDR400的内存芯片,当然DDR333超频到DDR400也是很稳定滴。

型号 厂商
DDR 32Mx16 HY5DU121622DTP-D43 Hynix
DDR 32Mx16 HY5DU121622CTP-D43 Hynix
DDR 32Mx16 HY5DU121622DTP-D43-C Hynix
DDR 32Mx16 H5DU5162ETR-E3C Hynix
DDR 32Mx16 K4H511638G-LCCC Samsung
DDR 32Mx16 K4H511638J-LCCC Samsung
DDR 32Mx16 A3S12D40ETP-G5 Zentel
DDR 32Mx16 NT5DS32M16BS-5T Nanya
DDR 32Mx16 P3S12D40ETP-GUTT Mira
DDR 32Mx16 MT46V32M16TG-6T:F Micron
DDR 32Mx16 MT46V32M16P-6T:F Micron
DDR 32Mx16 HYB25D512160CE-6 Qimonda
DDR 32Mx16 HYB25D512160CEL-6 Qimonda
DDR 32Mx16 HYB25D512160DE-6 Qimonda
DDR 32Mx16 HYB25D512160BE Infineon
DDR 32Mx16 EDD5116ADTA-6B-E Elpida

 

市面上这种老的DDR1颗粒肯定是不好找了。俺手里的老DDR1的内存,是8位的,也用不了。

不过在二手市场上,这种条子很普遍,价格也便宜。在中关村最常见的是现代HY5DU121622DTP-D43(DDR400)和HY5DU121622CTP-D43(DDR333)颗粒的条子。 

而8M的MX25XXXXX颗粒,型号是MX25L6445EM2I-10G。

升级DDR内存时,可以直接把703N原来的内存颗粒焊下来,把新的换上去即可。

而SPI FLASH颗粒,则需要先用别的编程器,把firmware写进去,然后再更换FLASH颗粒即可。

问题来了,俺手里现有的25XXX编程器是老式的,不支持。于是自己找电路图做了两个,谁知道人品很差。做的两个都没成功,而国外那个SPIFLASH编程软件的IO.DLL在WIN7下提示有问题……临近中秋国庆,从网上买是不太可能了。于是打算先不换SPI的FLASH芯片。

考虑到挂载USB设备后,可以加载EXTROOT,把程序都放到U盘或SD卡里,于是就暂时没有再换FLASH的想法了。

从二手市场买了几条现代HY5DU121622DTP-D43(DDR400)和HY5DU121622CTP-D43(DDR333)颗粒的台式机条子。用这种颗粒的内存条一般是512M的,单面,一条内存上有8个颗粒。在买的时候,有条件的话还是让卖家试一下机,以免出现问题都没处哭去,毕竟这种内存都有10年的历史了。现在想在身边找个用DDR1内存的电脑跟买彩票中奖的概率应该差不多。

手术步骤:

1、先把颗粒从内存条上用热风机吹下来,温度在350-370度就可以,速战速决。要不然高温可能会增加内存损坏的概率。

注意检查内存IC的脚,不要有焊锡粘连。

2、把703N的32MB内存用热风枪吹下来。加焊膏后,用烙铁把原来的焊盘清理一下,注意各脚之间不能有任何粘连。对准方向后,把64MB的内存颗粒脚与焊盘对齐,用热风枪焊好颗粒。

热风枪吹下的32MB DDR内存。

焊好的64MB DDR内存。

上面两个图片是清理焊膏后的效果图。手艺还不错吧,哈。

3、焊完内存颗粒之后,在加电之前,要拿放大镜仔细检查各脚之间是否有焊锡粘连,以及是否有虚焊等问题。

确认没任何问题之后,再加电。

上电之后,路由器正常工作。内存升级完成~~~~

下一步,就是要进行刷机操作了。当然,刷机操作在升级硬件之前也是可以滴。

http://iteyes.blog.sohu.com/240058202.html

openwrt下安装samba完美解决

基本步骤为安装samba-server 和配置2个步骤。

0x01

安装samba服务端

opkg install samba36-server

只要顺利一般这一行命令就安装完毕,如果找不到该包,需要先update一下

  1. opkg update
  2. opkg install samba36-server

这个命令安装的是samba的3.6版本,如果将来版本升级可能会找不到该包,则先查看opkg软件源是哪个版本

  1. opkg update
  2. opkg list | grep samba

0x02

配置文件为/etc/samba/smb.conf.template

有文章说配置的是/etc/samba/smb.conf 但是在openwrt下,samba服务重启,该文件就被重置了。

vi /etc/samba/smb.conf.template

首先注释掉[global]下的invalid users = root 这行,如果不注释掉则拒绝root用户登录。

#invalid users = root

接着就是增加共享目录,例子如下:

[etc]

path = /etc

valid users = root

guest ok = no

admin users = root

#意思是建立一个名叫做“etc”的共享目录,目录的位置是/etc ,允许root用户登录,拒绝游客。

配置完后,root用户还是没法登录,应该说samba会用系统的登录名,但是不会用系统的密码做验证,所以需要为samba设置一下密码

smbpasswd -a root

根据该命令的提示,输入root的验证密码,之后共享则使用该密码登录。

最后重启一下samba

/etc/init.d/samba restart

0x03

把以上操作做成shell脚本:

  1. opkg update
  2. package=`opkg list | grep samba36-server | awk '{print $1}'`
  3. opkg install $package
  4. sed -i '/invalid users/s/invalid/#invalid/g' /etc/samba/smb.conf.template
  5. (cat <<EOF
  6. [etc]
  7. path = /etc
  8. valid users = root
  9. guest ok = no
  10. admin users = root
  11. [tmp]
  12. path = /tmp
  13. valid users = root
  14. guest ok = no
  15. admin users = root
  16. [usr]
  17. path = /usr
  18. valid users = root
  19. guest ok = no
  20. admin users = root
  21. [var]
  22. path = /var
  23. valid users = root
  24. guest ok = no
  25. admin users = root
  26. [www]
  27. path = /www
  28. valid users = root
  29. guest ok = no
  30. admin users = root
  31. EOF
  32. ) >>/etc/samba/smb.conf.template
  33. smbpasswd -a root
  34. /etc/init.d/samba restart

Windows下使用自带certutil工具校验文件MD5、SHA1、SHA256

example.jpg

比如在Androidfilehost dot com上下载的刷机文件,需要校验文件完整性,查看是否遭到破坏。
在macOS下可以直接在terminal里使用md5命令校验md5值,真的方便(ubuntu等Linux发行版下我没试唉,肯定集成了的)。
可素我不知道Windows下shell中也集成了专门的工具用来校验文件的MD5值、SHA1值、SHA256值的,吼吼吼!命令是:
certutil -hashfile xxx MD5
certutil -hashfile xxx SHA1
certutil -hashfile xxx SHA256

xxx表示将验证文件的绝对路径(地址要填对)
其实就是 C:\Windows\System32 路径下有certutil.exe程序而已啦
而且64位的OS里, C:\Windows\SysWOW64 路径下也有这个程序~
如上图所示,可以直接这样使用来判断从网上下载的文件的完整性是否造成了损坏,大部分情况下都是建议使用专用的下载工具,比如迅雷极速版,因为浏览器自带的下载器很容易造成文件损伤。
知道了这个命令也就不用在百度找什么文件MD5验证工具比如HashMyFiles、HashCalc、WinMD5、Hasher blabla的了,非常简单好用,推荐给大家。
Command Prompt(CMD)、Powershell 均可。

TL-WR720N v3路由刷入openwrt并挂载U盘,编译openwrt,使用barrier_breaker 14.07的imagebuilder编译

TL-WR720N v3

TL-WR720N v3 openwrt官网介绍

TP-LINK WR703N把OpenWrt挂载u盘教程

17

主题

1

好友

676

积分

Workshop Team

Rank: 8Rank: 8

跳转到指定楼层

楼主

sysupgrade
  发表于 2012-11-7 22:10:46  | 只看该作者  | 倒序浏览
本帖最后由 339388279 于 2012-11-8 11:08 编辑

因为系统只有4M空间,不够用,所以我们要把系统挂载在u盘上
根据刷机教程刷好机后,先不能安装luci,不然会内存不足
插上u盘
依次执行下列命令
opkg update
opkg install kmod-usb-storage block-mount kmod-fs-ext4  e2fsprogs
mke2fs -j /dev/sda
mount /dev/sda /mnt
mkdir /tmp/root
mount -o bind / /tmp/root
cp /tmp/root/* /mnt -a
umount /tmp/root

完成后,修改/etc/config/fstab 文件,让系统启动自动挂载,修改成如下
config mount
option target   /
option device   /dev/sda
option fstype   ext3
option options  rw,sync
option enabled  1
option enabled_fsck 0

执行如下命令让其生效
/etc/init.d/fstab enable

接着安装 web 控制台
opkg update
opkg install luci
/etc/init.d/uhttpd enable
/etc/init.d/uhttpd start

这样就成功把系统挂载到u盘上了

Openwrt手动释放内存

echo 3 > /proc/sys/vm/drop_caches

[OpenWrt] tp-link wr703n刷openwrt挂载u盘攻略

1. 下载openwrt固件到本地,要下载最新的,否则后续安装软件会有冲突.
http://downloads.openwrt.org/snapshots/trunk/ar71xx/openwrt-ar71xx-generic-tl-wr703n-v1-squashfs-factory.bin
2. 从web页面直接升级安装
3. 升级完成以后,系统默认没有web界面,需要telnet登陆,ip地址默认为 192.168.1.1,默认没有设置网关信息
4. telnet 登陆 192.168.1.1
5. 设置系统的网络,设置dns,网关等信息,默认没有.需要修改
修改 /etc/config/network
在 config interface ‘lan’ 内添加如下字段

option gateway ‘192.168.1.1’
option dns ‘192.168.1.1’

6. 安装usb,让u盘成为默认的根分区,因为系统只有4M空间,不够用.u盘要现在linux系统里面分区,最好分两个去,一个sda1,一个sda2. sda1作为系统的根分区,sda2可以用来存储文件
执行如下命令安装

opkg update
opkg install kmod-usb-storage block-mount kmod-fs-ext4

7. 安装完成以后,挂载u盘.如下命令将默认的系统盘转移到u盘中.

mount /dev/sda1 /mnt
mkdir /tmp/root
mount -o bind / /tmp/root
cp /tmp/root/* /mnt -a
umount /tmp/root

8. 修改 /etc/config/fstab 文件,让系统启动自动挂载,修改成如下

config mount
option target   /overlay
option device   /dev/sda1
option fstype   ext3
option options  rw,sync
option enabled  1
option enabled_fsck 0

执行如下命令让其生效

/etc/init.d/fstab enable

9. 接着安装 web 控制台

opkg update
opkg install luci
/etc/init.d/uhttpd enable
/etc/init.d/uhttpd start

10. 安装其他软件
*** Samba ***

opkg install samba36-server
opkg install luci-app-samba
vi /etc/config/samba

*** Transmission ***

opkg install transmission-daemon
opkg install transmission-web
opkg install luci-app-transmission
transmission-daemon
killall transmission-daemon
vi /etc/config

*** LVM ***

opkg install lvm2
lvm
pvcreate /dev/{sdb1,sdc1}
pvscan / pvdisplay
vgcreate usbvg /dev/{sdb1,sdc1}
vgscan / pvscan / vgdisplay
lvcreate -n usblv usbvg
lvscan / lvdisplay
mkfs.ext3 /dev/usbvg/usblv
mount /dev/usbvg/usblv /mnt/share

11. 所有工作完成以后, reboot

12. 设置并激活 swap 分区

mkswap /dev/sda2

修改 fstab 文件,激活

config swap
option device   /dev/sda2
option enabled  1
=====================================================================另方法:

openwrt官网介绍imagebuilder编译

TL-WR720N v3只有 flash 4M,刷入官网openwrt会没有多余空间去挂载u盘,安装其他软件,所以精简模块软件,编译,减小体积,能直接挂载u盘了,增加空间,就能下载软件,就好用了,imagebuilder是最方便的修改安装软件包,编译的方式

vmware centos7

https://archive.openwrt.org/barrier_breaker/14.07/ar71xx/generic/  下载imagebuilder

wget https://archive.openwrt.org/barrier_breaker/14.07/ar71xx/generic/OpenWrt-ImageBuilder-ar71xx_generic-for-linux-x86_64.tar.bz2
tar -xjf OpenWrt-ImageBuilder-ar71xx_generic-for-linux-x86_64.tar.bz2

cd OpenWrt-ImageBuilder-ar71xx_generic-for-linux-x86_64

make info 查看所有PROFILE参数,包括packages
make info |grep 720  看profile,

由于make image会下载需要的交叉编译环境,可以设置终端代理
export http_proxy=http://192.168.204.1:1081
export https_proxy=http://192.168.204.1:1081

make image PROFILE="TLWR720" PACKAGES="luci kmod-usb-storage kmod-fs-ext4 e2fsprogs block-mount -firewall -ip6tables -iptables -kmod-ipt-nathelper -odhcp6c"

bin/ar71xx/openwrt-ar71xx-generic-tl-wr720n-v3-squashfs-factory.bin  编译好的bin文件,去刷新固件
bin/ar71xx/openwrt-ar71xx-generic-tl-wr720n-v3-squashfs-sysupgrade.bin 是从已经是openwrt的路由刷新固件

TL-WR720N v3 插入U盘,开关拨到3G

web登录路由 192.168.1.1
1.设置密码
2.ssh登录openwrt, mkfs.ext4 /dev/sda1格式化U盘,一直回车
3.system---mount point 设置挂载点(选中上面的Enable this mount),/dev/sda1,挂载点/overlay,格式ext4
4.重启,后登录ssh openwrt,df看/overlay容量是否为U盘容量
openwrt桥接使用,电脑网线连接TL-WR720N v3路由,路由连接wifi上网

openwrt  network--wifi--点击scan  选择wifi点击后面的join network,输入密码,其他默认,下一页点击最下面的save & apply,保存后还会在这个页,会自动连接。(或者在network--interface最下面的wwan,clinet wifi名,点击右边的connect)
进入network--interface,看到刚才新建的桥接,默认名称wwan(下面有client wifi name),如果上面配置完没有自动连接,可以点击连接

 

openwrt 终端命令
opkg update
opkg install kmod-usb2
opkg list_installed
opkg remove name

opkg配置文件 /etc/opkg.conf  /rom/etc/opkg.conf(只读),可以在web上system--software--configuration看到,主要看配置的源地址

 

//刷回官方固件
连接路由,可以登录,设置root密码
ssh root@192.168.1.1
opkg update
opkg install openssh-sftp-server # 不安装不能用xftp传文件
使用xshell的sftp上传固件到/tmp, https://service.tp-link.com.cn/detail_download_918.html
# cat /proc/mtd看是否有firmware块
mtd -r write /tmp/wr720nv3.bin firmware

 

//rz上传 sz下载
opkg install lrzsz
ln -s /usr/bin/lrz /usr/bin/rz
ln -s /usr/bin/lsz /usr/bin/sz

OpenWrt挂载U盘(NTFS)并在网上邻居共享访问

工具/原料

  • 刷好OpenWrt(带LuCI界面)的路由器一台 当然必须带USB接口
  • 软件:putty 用于命令行操作路由器
  • 软件:WinSCP 用于修改路由器配置文件

方法/步骤

  1. 用putty连接路由器,用putty下载安装所需的软件包:(直接复制下面内容到提示符)

    opkg update

    opkg install kmod-usb-core

    opkg install kmod-usb2                #安装usb2.0

    opkg install kmod-usb-ohci            #安装usb ohci控制器驱动

    opkg install kmod-usb-storage         #安装usb存储设备驱动

    opkg install kmod-fs-ext3             #安装ext3分区格式支持组件

    kmod-fs-ext4、kmod-fs-vfat、kmod-fs-ntfs

     

    opkg install kmod-fs-vfat             #挂载FAT

    opkg install ntfs-3g                  #挂载NTFS

    opkg install mount-utils              #挂载卸载工具

    opkg install block-mount

    opkg install luci-app-samba           #SAMBA网络共享服务

    /etc/init.d/samba enable              #启用并开始SAMBA共享

    /etc/init.d/samba restart

    注意 在线安装软件包需保证路由器Wan口可以连接Internet

    OpenWrt挂载U盘(NTFS)并在网上邻居共享访问
  2. 重启路由器 登陆路由器设置界面 可以看到多了挂载点网络共享两个选项(也可全部做完再重启)

    OpenWrt挂载U盘(NTFS)并在网上邻居共享访问
    OpenWrt挂载U盘(NTFS)并在网上邻居共享访问
  3. 用WinSCP连接路由器,打开/etc/hotplug.d/block/10-mount文件(如果不存在请新建)

    修改为如下内容

    #!/bin/sh

     

    # Copyright (C) 2009 OpenWrt.org  (C) 2010 OpenWrt.org.cn

     

    blkdev=`dirname $DEVPATH`

    if [ `basename $blkdev` != “block” ]; then

     

    device=`basename $DEVPATH`

    case “$ACTION” in

    add)

    mkdir -p /mnt/$device

    # vfat & ntfs-3g check

    if  [ `which fdisk` ]; then

    isntfs=`fdisk -l | grep $device | grep NTFS`

    isvfat=`fdisk -l | grep $device | grep FAT`

    isfuse=`lsmod | grep fuse`

    isntfs3g=`which ntfs-3g`

    else

    isntfs=””

    isvfat=””

    fi

     

    # mount with ntfs-3g if possible, else with default mount

    if [ “$isntfs” -a “$isfuse” -a “$isntfs3g” ]; then

    ntfs-3g -o nls=utf8 /dev/$device /mnt/$device

    elif [ “$isvfat” ]; then

    mount -t vfat -o iocharset=utf8,rw,sync,umask=0000,dmask=0000,fmask=0000 /dev/$device /mnt/$device

    else

    mount /dev/$device /mnt/$device

    fi

    if [ -f /dev/${device}/swapfile ]; then

    mkswap /dev/${device}/swapfile

    swapon /dev/${device}/swapfile

    fi

    ;;

    remove)

    if [ -f /dev/${device}/swapfile ]; then

    swapoff /dev/${device}/swapfile

    fi

    umount /dev/$device

    ;;

    esac

     

    fi

    这段脚本可实现自动挂载,如不想编辑脚本,也可在挂载点中自己设置(PS.没试过)

    OpenWrt挂载U盘(NTFS)并在网上邻居共享访问
  4. 插入U盘或移动硬盘 再次重启路由器 在挂载点中就可以看到已经挂载的设备

    如果U盘只有一个分区,就是/mnt/sda1,第二个分区是/mnt/sda2

    如果用Hub接入多个U盘,第二个设备就是/mnt/sdb,以此类推

    OpenWrt挂载U盘(NTFS)并在网上邻居共享访问
  5. 进入网络共享中,添加共享目录例如/mnt/sda1,权限为777(即完全访问)。

    至此就可以在网上邻居中看到路由器的这个共享文件夹了。

    OpenWrt挂载U盘(NTFS)并在网上邻居共享访问
  6. 注意XP系统 必须保证

    Computer Browser

    Server

    Application Layer Gatway Service

    Windows Firewall/Internet Connection Sharing

    这几个服务开启 并且在本地连接属性中

    Microsoft 网络的文件和打印机共享

    启用时 网上邻居文件才可以访问

    OpenWrt挂载U盘(NTFS)并在网上邻居共享访问

OpenWrt一些小问题的解决方法

创建像网站这样的交互式终端

可以创建一个看起来像终端的静态网站或投资组合。但是,如果访问网页的人可以像在真正样式的终端中一样键入一些命令并获得输出,那就更好了。

这些真实终端通常在GNU / Linux系统或Mac OSX上使用,但Windows用户也可以使用PowerShell cmd.exec或Windows 10 WSL(Linux的Windows子系统)使用,Windows 10仅是Windows上的Linux。对于任何系统管理员或更高级的用户,它都是最常用的工具。

如果您拥有一个可以为您提供终端模拟器外观和感觉的库,并且具有漂亮的API来创建命令,那么创建此类终端风格的网站就很容易,因此您无需从头开始创建。我们将使用JavaScript库jQuery Terminal,它提供了一个简单但功能强大的API,可以在任何网站上创建交互式终端。本文将向您展示如何在任何html网页上创建基于Web的简单交互式终端。

首先,您需要创建基本的html页面,其中将包含所有依赖项:

<!DOCTYPE html> 
<html> 
<head> 
<script src =“ https://code.jquery.com/jquery-3.3.1.min.js”> </ script> 
<script src =“ https:// unpkg.com/jquery.terminal/js/jquery.terminal.min.js“> </ script> 
<link rel =” stylesheet“ href =” https://unpkg.com/jquery.terminal/css/jquery.terminal .min.css“ /> 
</ head> 
<body> 
</ body> 
</ html>

然后在body标签中,可以使用第一个命令创建第一个终端:

<script> 
$('body')。terminal({ 
    hello:function(what){ 
        this.echo('Hello,'+ what + 
                  '. Welcome to this terminal。'); 
    } 
},{
    问候:“我的第一个终端' 
}); 
</ script>

如果键入“ hello Medium”,则输出如下所示:

终端画面

终端画面

简单的交互式终端网站

您可以添加到终端主题网站的另一个示例命令是显示图像。以下代码将添加命令“ cat”,该命令将显示小猫的图像。

$( '主体')端子。({
    猫:函数(){ 
        this.echo($( '<IMG SRC = “ https://placekitten.com/408/287 ”>')); 
    } 
});

您还可以在命令中添加参数。您可以添加两个参数来确定图像的特定大小(这将反过来创建不同的图像,这就是placekitten.com的工作方式)。

$('body')。terminal({ 
    cat:function(width,height){ 
        const img = $('<img src =“ https://placekitten.com/'+ 
                      width +'/'+ height +'” >'); 
        this.echo(img); 
    } 
});

如果您键入命令“ cat”并使用特定大小,这将为您提供以下输出:

图片发布

图片发布

终端显示猫的形象

注意:请注意,这里有jQuery $()调用包装器,您不仅回显html文本,而且回显jQuery对象。此限制是出于安全原因。您还可以将带有{raw:true}的选项对象用作回显的第二个参数。

有些命令是异步的,需要一些时间才能计算出来。图像的加载不是即时的,尤其是在慢速网络上。因此,您可以在命令处理异步请求时暂停终端。

$('body')。terminal({ 
    cat:function(width,height){ 
        const img = $('<img src =“ https://placekitten.com/'+ 
                      width +'/'+ height +'” >'); 
        img.on('load',this.resume); 
        this.pause(); 
        this.echo(img); 
    } 
},{
    问候:“我的第一个终端\ n' 
})

另一个选择是从函数返回一个承诺:

函数get_image(url){
    返回新的Promise(function(resolve,reject){ 
        const img = $('<img src =“'+ url +'”'/>'); 
        img.on('load',() => resolve(img)); 
        img.on('错误',拒绝); 
    }); 
}$('body')。terminal({ 
    cat:function(width,height){ 
        return get_image(' https://placekitten.com/'+ width + 
                         '/'+ height); 
    } 
},{
    问候:'我第一航站楼\ n' 
});

而且您不需要回显任何将处理承诺的终端。由于此功能,您可以使用访存并获取AJAX调用的输出:

$('body')。terminal({ 
    title:function(){ 
        return fetch('https://terminal.jcubic.pl')
            .then(r => r.text()).then 
            (html => html .match(/ <title>([^>] +)< \ / title> /)[1]); 
    } 
},{
    问候:“我的第一个终端\ n” 
});

该命令将显示库的首页标题。

注意:如果您希望将漂亮的ASCII Art作为欢迎消息,则可以使用figlet.js库,请参见此CodePen演示

如果要具有与GNU / Linux或MacOSX终端仿真器中相同的命令,可以在其中添加可选的参数和选项,则可以使用将解析选项并返回漂亮对象的函数。以下代码将向您展示如何做到这一点。

$('body')。terminal({ 
    title:function(... args){ 
        const options = $ .terminal.parse_options(args); 
        return fetch(options.url ||'https: //terminal.jcubic.pl ')
            .then(r => r.text()).then(
            html => html.match(/ <title>([^>] +)< \ / title> /)[1]); 
    } 
}, { 
    checkArity:否,
    问候:“我的第一终端” \ n' 
});

checkArity选项很重要。如果没有此选项,则当函数具有大于零的任意数量的参数时,终端将引发错误(这是ES6变量参数的工作方式,树点,终端认为函数接受0个参数)。

该命令的输出如下所示:

图片发布

图片发布

交互式终端会话,使用jQuery Terminal的命令很少。

当然,如果只有一个可选参数,则不需要解析选项,例如在这种情况下,您可以只使用一个参数url:

$('body')。terminal({ 
    title:function(url){ 
        return fetch(url ||'https: 
            //terminal.jcubic.pl ').then(r => r.text()).then 
            ( html => html.match(/ <title>([^>] +)< \ / title> /)[1]); 
    } 
},{ 
    checkArity:false,
    问候语:“ My First Terminal \ n' 
});

但是,如果需要更复杂的命令,则解析选项很有用。您可以像前面的示例一样使用GNU样式的长选项,但也可以使用-u等短选项,它将在options.u变量中访问。您可以在此Wiki页面上阅读有关解析命令和选项的更多信息。

您要添加的另一项功能是制表符完成。如果您这样设置终端(在文档中可以找到其他选项),那么您所需要的只是一个选项:

$('body')。terminal({ 
    title:function(... args){ 
        const options = $ .terminal.parse_options(args); 
        return fetch(options.url ||'https: //terminal.jcubic.pl ')
            .then(r => r.text()).then(
            html => html.match(/ <title>([^>] +)< \ / title> /)[1]); 
    } 
}, { 
    checkArity:false,
    完成:true,
    问候:“我的第一个终端\ n” 
});

现在,当您键入“ t”并按键盘上的Tab键时,它将完成命令“ title”,因此您无需手动键入整个命令。

您可能还需要一些“帮助”命令,其中将列出可用命令。

就是这样。以此为基础,您应该能够编写自己的简单终端。本文未讨论的jQuery Terminal库的功能包括:

您还可以看看的,在使用这个库创意的例子,网站或单个网页的大名单例子页。例如,其中包括动画或404页面,这些页面提供了您可以浏览的命令(例如Wikipedia文章或专业术语:印刷形式时也称为Hacker Dictionary,或者被黑客称为死树版本)。

最后,我想向您展示一个演示,为您提供复古外观的终端,就像计算机开始时的旧CRT显示器一样。

您可以在此CodPen演示中找到代码。您也可以在窗口中创建终端,不需要全屏显示。

使您的网站看起来像Linux终端

您看过我的个人网站JeffWeisbein.com吗?没有?继续,检查一下。我给你一分钟左右的时间。好吧,你现在回来了。因此,现在您可能想知道如何创建与该网站相似的网站。幸运的是,这很容易。您需要做的就是在JeffWeisbein.com上复制源代码,复制文本文件,对源代码和文本文件进行一些小的修改,然后将文档上载到Web服务器。

但是首先,您如何查看源代码?根据您的网络浏览器,它可能会略有不同,但是通常您可以右键单击该页面,然后选择“查看源代码”或类似的功能。它将打开一个包含源代码的新窗口。只需复制所有代码,打开您喜欢的HTML编辑器,然后将代码粘贴到其中即可。从那里,您可以进行所需的任何修改。例如,您可以(并且可能会想要)将文档标题从Jeff Weisbein更改为您自己的名字(例如John Doe)。您还可以通过修改样式/ CSS来更改页面上使用的颜色。

除了这些更改之外,您还需要在源代码中向下滚动到大约第161行,您将在其中更改以下代码行:

Typer.file="jeffweisbein.txt";Typer.file="yourname.txt";

当然,您可以将“您的姓名”替换为您的真实姓名。完成此操作后,将文件另存为.html(HTML)文件。

现在,最后一步。返回您的Web浏览器并访问http://www.jeffweisbein.com/jeffweisbein.txt

<span id="a">jeff@weisbein</span>:<span id="b">~</span><span id="c">$</span> cat jeffweisbein.txt<br/><br/>
Hi, I'm Jeff Weisbein.<!-- laglaglaglaglaglaglaglaglaglaglaglag --><p>I majored in Business Administration with a concentration in Finance. I graduated Summa Cum Laude. I'm currently enrolled in the <a href="https://analytics.hbs.edu">Business Analytics Program at Harvard</a>.</p><!-- qowifjqwoeijfoqweijfqweoifjqweofijqweoqwoijefoqwijefoijfqiwoefjj -->
<p>I'm the founder and CEO of <a href="http://www.besttechie.com">BestTechie</a> and <a href="https://getkya.com">KYA</a>.</p><!- oqwipjefqwioefjwioqfjoiqwjfeioqwjefoi -->
<p>I got started with technology at the age of 13 when I convinced my parents to let me use their credit card to buy the BestTechie domain along with some web hosting. I haven't looked back since.</p><!-- owlsqweoifjqwoefijqwoeifjqwoefijwef -->
If you would like to get in touch with me, whether it be for tech support, a business venture, or to just say hi<!-- slightdelayhere-->, feel free to send me an email or a tweet.<!-- longlongcomment --> My email address is: <a href="mailto:jeff@besttechie.com">jeff@besttechie.com</a> and my Twitter is: <a href="http://twitter.com/jeffweisbein">@jeffweisbein</a>.
<p>And if you haven't already, be sure to check out my tech publication <a href="http://www.besttechie.com">http://www.besttechie.com</a> and analytics startup <a href="https://getkya.com">https://getkya.com</a>.</p>

到那里后,复制文本文件的内容,然后将其粘贴到计算机上自己的文本文件中。同样,您将需要编辑内容以适合您的需求,但是,请确保将所有段落括号以及所有注释保留在文本文件中。它们是站点正常运行所必需的。进行更改后,将文档另存为yourname.txt(再次将“ yourname”替换为您的真实姓名)。我还应注意,您必须将其另存为文本文件 (扩展名为.txt)才能正常工作。

如果您有任何疑问,评论或问题,请随时发表评论,我会尽力提供帮助。

最后,我要感谢我的朋友Sam Phippen,让我与大家分享他出色的网站构想和编码技巧。

Linux 在线模拟器

最近在学习Linux的一些命令的使用,但是很久之前装的Linux虚拟机被删掉了,又不想为了练习几个命令折腾一遍虚拟机。所以,就尝试地搜了一下,看看有没有在线的Linux模拟器可以使用,只要可以练习一下命令的使用即可。在google中用英文关键词一搜,还真有大牛弄出了一些在线的Linux模拟器,而且用起来还不错。搜集了4个,赶紧分享出来,供大家初步学习和实践Linux之用。

一个叫Fabrice Bellard的工程师使用 JavaScript 在浏览器上模拟出了一个 Linux 系统。没有图形化界面,完全使用命令行的方式与之互动。Linux操作系统内核版本为2.6.20。具体使用过程中可以参考jslinux:的FAQ:http://bellard.org/jslinux/faq.html 和技术说明:http://bellard.org/jslinux/tech.html

jslinux:控制台窗口:

image

维也纳一家叫mass:werk media environments的公司使用JavaScript 开发的免费的类UNIX的在线OS。JS/UIX 的使用参考手册地址:http://www.masswerk.at/jsuix/man.txt  同时,开发和使用的JavaScript函数库termlib.js也是免费使用的,可以到公司官网上去下载:http://www.masswerk.at/termlib/

官网上对JS/UIX 的介绍:”JS/UIX is an UN*X-like OS for standard web-browsers, written entirely in JavaScript (no plug-ins used). It comprises a virtual machine, shell, virtual file-system, process-management, and brings its own terminal with screen- and keyboard-mapping.”

JS/UIX 控制台窗口:

image

jor1k是由新西兰的一位叫Benjamin Burns的软件工程师开发的,Benjamin Burns目前就职于位置服务公司Telogis,jor1k是他在github上的开源项目,也是用JavaScript开发的:https://github.com/s-macke/jor1k/

github上关于jor1k的介绍:“jor1k is a OpenRISC 1000 emulator written in JavaScript running Linux. It runs in almost any modern web browser.”

jor1k控制台窗口:

image

cb.vu也是一个用Javascript开发的在线模拟器,系统版本是FreeBSD 7.1-STABLE ,界面是铺满浏览器窗口的,个人感觉使用起来比前面几个都方便一点,一般用这个。

使用过程中可参考TOOLBOX中文版:http://cb.vu/unixtoolbox_zh_CN.xhtml

cb.vu控制台窗口:

image

MySQL创建全文索引

使用索引是数据库性能优化的必备技能之一。在MySQL数据库中,有四种索引:聚集索引(主键索引)、普通索引、唯一索引以及我们这里将要介绍的全文索引(FULLTEXT INDEX)。

全文索引(也称全文检索)是目前搜索引擎使用的一种关键技术。它能够利用“分词技术“等多种算法智能分析出文本文字中关键字词的频率及重要性,然后按照一定的算法规则智能地筛选出我们想要的搜索结果。在这里,我们就不追根究底其底层实现原理了,现在我们来看看在MySQL中如何创建并使用全文索引。

在MySQL中,创建全文索引相对比较简单。例如,我们有一个文章表(article),其中有主键ID(id)、文章标题(title)、文章内容(content)三个字段。现在我们希望能够在titlecontent两个列上创建全文索引,article表及全文索引的创建SQL语句如下:

--创建article表
CREATE TABLE article (
	id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
	title VARCHAR(200),
	content TEXT,
	FULLTEXT (title, content) --在title和content列上创建全文索引
);

上面就是在创建表的同时建立全文索引的SQL示例。此外,如果我们想要给已经存在的表的指定字段创建全文索引,同样以article表为例,我们可以使用如下SQL语句进行创建:

--给现有的article表的title和content字段创建全文索引
--索引名称为fulltext_article
ALTER TABLE article
ADD FULLTEXT INDEX fulltext_article (title, content)

在MySQL中创建全文索引之后,现在就该了解如何使用了。众所周知,在数据库中进行模糊查询是使用LIKE关键字进行查询,例如:

SELECT * FROM article WHERE content LIKE '%查询字符串%'

那么,我们使用全文索引也是这样用的吗?当然不是,我们必须使用特有的语法才能使用全文索引进行查询。例如,我们想要在article表的titlecontent列中全文检索指定的查询字符串,可以如下编写SQL语句:

SELECT * FROM article WHERE MATCH(title, content) AGAINST('查询字符串')

强烈注意:MySQL自带的全文索引只能用于数据库引擎为MyISAM的数据表,如果是其他数据引擎,则全文索引不会生效。此外,MySQL自带的全文索引只能对英文进行全文检索,目前无法对中文进行全文检索。如果需要对包含中文在内的文本数据进行全文检索,我们需要采用Sphinx(斯芬克斯)/Coreseek技术来处理中文。本站将会在后续文章中对Sphinx以及Coreseek进行介绍。

备注1:目前,使用MySQL自带的全文索引时,如果查询字符串的长度过短将无法得到期望的搜索结果。MySQL全文索引所能找到的词的默认最小长度为4个字符。另外,如果查询的字符串包含停止词,那么该停止词将会被忽略。

备注2:如果可能,请尽量先创建表并插入所有数据后再创建全文索引,而不要在创建表时就直接创建全文索引,因为前者比后者的全文索引效率要高。

mysql之模糊查询的方法

1.主要有两种方式:

like与SQL通配符  和  正则表达式模糊查询。

2.like与SQL ,必须使用like关键字

  • SQL的通配符如下:

% 百分号: 替代一个或者多个字符

_  下划线:仅替代一个字符

[字符列]  :字符列中任何一个单一字符

[^字符列] 或者[!字符列]:  不在字符列中的任何一个单一字符

  • 用法如下

select 字段列表 from 表名 where 字段 like ‘Ne%’;     表示:查询以Ne开头的数据

select 字段列表 from 表名 where 字段 like ‘%Ne%’;  表示:查询含有Ne的数据

select 字段列表 from 表名 where 字段 like ‘L_ve’;     表示:查询含有 L+某一个字符+ve的数据

select 字段列表 from 表名 where 字段 like ’[abc]%’;  表示:查询a/b/c开头的数据

3.正则表达式模糊查询 必须使用regexp关键字

牢记如下规则:

 . , 尖角符  ^ , 美元符 $ ,  字符集 [ ] ,  逻辑或 |  , 星号 * , 加号 + , 问号 ,大括号 { }

  • 语法如下:

select 字段列表 from 表名 where 字段 [not] regexp [binary] ‘正则表达式’;

  • 用法如下:

select 字段列表 from 表名 where 字段 regexp ‘j.’ ;   表示:查询 j 开头且为两个字符的数据

select 字段列表 from 表名 where 字段 regexp ‘158[0-9]{9}’;  表示:查询 158开头,11位的电话号码

。。。。。。

三、总结

  • 正则表达式的模式匹配比like 运算符的模式匹配更加强大、灵活。

Mysql模糊查询正常情况下在数据量小的时候,速度还是可以的,但是不容易看出查询的效率,在数据量达到百万级,千万级的甚至亿级时 mysql查询的效率是很关键的,也是很重要的。

一、一般情况下 like 模糊查询的写法:前后模糊匹配

这个SQL语句,如果用explain解释的话,我们很容易就能发觉它是没有走索引搜索,而是对全表进行了扫描,这显然是很慢的,还有卡库的可能。

如果将上面的SQL语句改成下面的写法:

就是把‘keyword’前面的%去掉了,这样的写法用explain解释看到,SQL语句使用了索引,这样就可以大大的提高查询的效率。

有时候,我们在做模糊查询的时候,并非要想查询的关键词都在开头,所以如果不是特别的要求,”keywork%”并不合适所有的模糊查询。

二、模糊查询高效的方法:

1、LOCATE(’substr’,str,pos)方法

解释:返回 substr 在 str 中第一次出现的位置,如果 substr 在 str 中不存在,返回值为 0 。如果pos存在,返回 substr 在 str 第pos个位置后第一次出现的位置,如果 substr 在 str 中不存在,返回值为0。

实例:

备注:keyword是要搜索的内容,business为被匹配的字段,查询出所有存在keyword的数据

2、POSITION(‘substr’ IN `field`)方法

其实我们就可以把这个方法当做是locate()方法的别名,因为它和locate()方法的作用是一样的。

实例:

3、INSTR(`str`,’substr’)方法

格式:

实例:

除了上述的方法外,还有一个函数FIND_IN_SET,这个方法比较特殊,他所查询的必须要是以“,”分隔开。

4、FIND_IN_SET(str1,str2):

返回str2中str1所在的位置索引,其中str2必须以”,”分割开。

格式:

实例:

html结合js实现简单的树状目录

img

下面我就来分享一下JSP怎么实现一个简单的树状目录:

1. 下载jquery-treeview插件:github 百度云

2. 解压刚才下载的压缩包,并将images文件夹的中gif复制到项目中的图片管理文件夹中,如下图: images img

当然复制到什么地方是你自己选择

3. 然后将jquery.treeview.css复制到你项目的css管理文件中: treeview css

可选:复制demo/screen.css到项目中

4. 复制jquery.treeview.js到项目中的js管理文件夹中: treewiew js

可选:复制demo/jquery.cookie.js到项目中

5. 修改jquery.treeview.css中图片的路径(一样的就可以不修改了):

images img

步骤4中的img是你图片所在的文件夹

6.在head标签中添加连接:

<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
    <link rel="stylesheet" href="css/jquery.treeview.css" type="text/css"/>
    <!--screen.css不要也可以-->
    <link rel="stylesheet" href="css/screen.css" type="text/css"/>

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js"></script>
    <!--jquery.cookie.js不要也可以-->
    <script src="js/jquery.cookie.js"></script>
    <script src="js/jquery.treeview.js" type="text/javascript"></script>

<script type="text/javascript">
    $(document).ready(function(){
        $("#treeview").treeview({
            toggle: function() {
                console.log("%s was toggled.", $(this).find(">span").text());
            }
        });
    });
</script>
</head>12345678910111213141516171819202122

7.写一点代码来测试下:

<div id="main">
<ul id="treeview" class="filetree">
    <li><span class="folder">密码修改</span>
        <ul>
        <li><span class="file">密码修改</span></li>
        </ul>
    </li>
    <li><span class="folder">系统管理</span>
        <ul>
        <li><span class="file">系统管理</span></li>
        </ul>
    </li>
    <li><span class="folder">行政部门</span>
        <ul>
            <li><span class="file">合同管理</span></li>
            <li><span class="file">加班信息</span></li>
            <li><span class="file">业绩报告</span></li>
        </ul>
    </li>
    <li><span class="folder">考勤部门</span>
        <ul>
            <li><span class="file">考勤信息</span></li>
        </ul>
    </li>
    <li><span class="folder">人力资源部</span>
        <ul>
            <li><span class="file">添加员工</span></li>
            <li><span class="file">删除员工</span></li>
            <li><span class="file">信息跟踪</span></li>
            <li><span class="file">修改员工信息</span></li>
            <li><span class="file">员工信息查询</span></li>
            <li><span class="file">合同过期查询</span></li>
        </ul>
    </li>
    <li><span class="folder">请假管理</span>
        <ul>
            <li><span class="file">请假审批</span></li>
        </ul>
    </li>
    <li><span class="folder">招聘管理</span>
        <ul id="tree">
            <li><span class="folder">求职者信息管理</span>
                <ul>
                    <li><span class="file">添加</span></li>
                    <li><span class="file">查询</span></li>
                </ul>
            </li>
            <li><span class="file">添加招聘信息</span></li>
            <li><span class="file">修改招聘信息</span></li>
        </ul>
    </li>
    <li><span class="folder">财务部门</span>
        <ul>
            <li><span class="file">密码修改</span></li>
            <li><span class="file">薪资管理</span></li>
            <li><span class="file">加班信息</span></li>
            <li><span class="file">考勤信息</span></li>
            <li><span class="file">业绩报告</span></li>
            <li><span class="file">固定薪资</span></li>
        </ul>
    </li>
    <li><span class="folder">培训管理</span>
        <ul>
            <li><span class="file">添加培训</span></li>
            <li><span class="file">修改培训信息</span></li>
        </ul>
    </li>
</ul>
</div>123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869

8.运行效果: