头像

解决Mac上「应用程序“xxx”不能打开」的问题

除了在 Mac App Store 下载应用之外,有时候我们也会直接在一些网站上下载应用,而这就会出现一些稀奇古怪的问题,比如我下载的应用是经过压缩的打包文件,解压缩之后会发现软件打不开,显示的弹窗信息如下:

图1

其实这个错误主要是解压缩软件在解压文件时,破坏了应用里面可执行文件的权限造成的,当然修复起来也不复杂,首先在应用上点击右键,选择「显示包内容」:

图2

之后依次展开「Contents」-「MacOS」,找到对应文件夹下的文件,比如说截图中显示的Cinch。如果权限正确的话,该文件应该是一个Unix可执行的文件,而不是现在这种类型不明的文件。

图3

接下来打开终端,直接输入以下代码(注意 +x 前后都有空格):

chmod +x 

之后再将文件Cinch拖入终端(为了输入完整的执行路径),完整的命令如下:

chmod +x /Users/liyu/Downloads/cinch/Cinch.app/Contents/MacOS/Cinch

图4

最后回车,这时Finder中原本不明类型的文件现在变成了Unix可执行文件,图标也变成正常的了。

图5

重新打开下载的软件,你会发现下载的程序可以正常使用并执行了!

作者:Mr_Wrong6
链接:https://www.jianshu.com/p/45d9ab7fa921
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

头像

在Visual Studio 2019中修改项目名的方法

1.需求场景

场景一:开始创建项目时,瞎起了一个名字,等后面开发了一部分功能后突然想改名。

场景二:想从一个老项目的基础上开发一个新项目。

2.操作步骤

2.1 重命名解决方案

【解决方案】右键选择【重命名】,将OldSlnName重命名为NewSlnName

2.2 重命名项目名

【项目(OldProject)】右键选择【重命名】,将OldProject重命名为NewProject

2.3 修改程序集名称及命名空间

【项目(NewProject)】右键选择【属性】

2.4 全局替换项目名

在整个解决方案下搜索【旧项目名(OldProject)】,将其替换为【新项目名(NewProject)】

2.5 修改项目文件夹名称

关闭Visual Studio;

在文件管理器中找到项目文件夹,将【旧项目文件夹名(OldProject)】修改为【新项目文件夹名(NewProject)】

2.6 修改.sln文件

在项目文件夹下找到对应.sln文件,用文本编辑器打开;

将文件中的旧项目名称修改为新项目名称

修改完毕。

头像

XPath Helper:chrome爬虫网页解析工具 Chrome插件

XPath helper插件功能介绍

XPath Helper插件有什么用?
google插件XPath Helper可以支持在网页点击元素生成xpath,整个抓取使用了xpath、正则表达式、消息中间件、多线程调度框架(参考)。xpath 是一种结构化网页元素选择器,支持列表和单节点数据获取,他的好处可以支持规整网页数据抓取。
如果我们要查找某一个、或者某一块元素的xpath路径,可以按住shift,并移动到这一块中,上面的框就会显示这个元素的xpath路径,右边则会显示解析出的文本内容,并且我们可以自己改动xpath路径,程序也会自动的显示对应的位置,可以很方便的帮助我们判断我们的xpath语句是否书写正确。

XPath helper插件下载安装

XPath helper插件哪里可以下载?你可以从chrome应用商店里找到chrome爬虫插件,如果你的chrome应用商店无法打开,你可以在本站的下方找到chrome爬虫插件下载地址。

XPath helper插件怎么安装?
1. 如果你能够打开chrome应用商店,并且可以找到chrome爬虫插件,那么直接点击“添加至chrome”,如下图所示:
XPathhelper

2.如果你的chrome应用商店无法打开,你从本站或者其他途径获得了chrome爬虫插件,那么就选择离线安装该插件。由于chrome爬虫插件同其他chrome插件一样都是CRX格式的,所以具体的安装方法请参照:怎么在谷歌浏览器中安装.crx扩展名的离线Chrome插件? 如果CRX格式插件不能离线安装怎么办

Xpath helper插件使用说明

1.在chrome浏览器安装好xpath helper插件后,打开某个网页(以搜狐为例)拷贝目标页面元素的XPATH,如下图所示:
拷贝xpath

2.点击 Ctrl + Shift + X 激活 XPath Helper 的控制台,然后您可以在 Query 文本框中输入相应 XPath 进行调试了,提取的结果将被显示在旁边的 Result 文本框中,如下图所示:
xpath helper解析页面

1。打开一个新的标签,并导航到你最喜欢的网页。
2。按Ctrl-Shift键-X以打开XPath辅助控制台。
3。按住Shift键鼠标在页面上的元素。查询框会不断更新,以显示鼠标指针下面的元素充分XPath查询。结果框其右侧将显示评价结果的查询。
4。如果需要的话,可以直接在控制台编辑XPath查询。在结果框中将立即反映任何变化。
5。再次按Ctrl-Shift键-X关闭控制台

XPath helper插件注意事项

 

虽然XPath Helper插件使用非常方便,但它也不是万能的,有两个问题:
  1.XPath Helper 自动提取的 XPath 都是从根路径开始的,这几乎必然导致 XPath 过长,不利于维护;
  2.当提取循环的列表数据时,XPath Helper 是使用的下标来分别提取的列表中的每一条数据,这样并不适合程序批量处理,还是需要人为修改一些类似于*标记等。
不过,合理的使用Xpath,还是能帮我们省下很多时间的!
头像

微信小程序实现”淡入淡出”、”滑动渐入渐出”效果

因为是想实现通用的效果,所以我把方法放在app.js里。主要原理是通过控制透明度显示。

以下是代码:

//渐入,渐出实现
show: function (that, param, opacity, duration=1800) {
var animation = wx.createAnimation({
//持续时间1800ms
duration: duration,
timingFunction: ‘ease’,
});
//var animation = this.animation
animation.opacity(opacity).step()
//将param转换为key
var json = ‘{“‘ + param + ‘”:””}’
json = JSON.parse(json);
json[param] = animation.export()
//设置动画
that.setData(json)
},
//滑动渐入渐出
slideupshow: function (that, param, px, opacity) {
var animation = wx.createAnimation({
duration: 800,
timingFunction: ‘ease’,
});
animation.translateY(px).opacity(opacity).step()
//将param转换为key
var json = ‘{“‘ + param + ‘”:””}’
json = JSON.parse(json);
json[param] = animation.export()
//设置动画
that.setData(json)
},
//向右滑动渐入渐出
sliderightshow: function (that, param, px, opacity) {
var animation = wx.createAnimation({
duration: 800,
timingFunction: ‘ease’,
});
animation.translateX(px).opacity(opacity).step()
//将param转换为key
var json = ‘{“‘ + param + ‘”:””}’
json = JSON.parse(json);
json[param] = animation.export()
//设置动画
that.setData(json)
}
以下是页面使用方法:
wxml
<view  animation=”{{showBgp}}” class=”bgp” >这里是效果</view>
css
.bgp{
opacity:0; //主要是这个,其它可自定义
}
js中使用
getApp().show(this, ‘showBgp’, 1,1800);
头像

微信小程序audio标签 播放背景音乐

在使用过程中有一些注意事项:

1、不能使用本地文件,需要使用远程服务器上的地址

在开发者工作使用本地文件可以播放,但在手机预览或体验版时不能播放,报错:uncaught(in promise)。

 

其它后续更新。

以下是我的代码:

wxml
<audio id=”myAudio” src=”http://www.xxx.com/broken.mp3″ loop=”false” ></audio>
js
this.audioCtx = wx.createAudioContext(‘myAudio’);
this.audioCtx.play();
//播放指定时间后停止
setTimeout(function () {
that.audioCtx.pause();
},1000);
头像

微信小程序动态改变导航栏标题和背景颜色

1、动态的改变标题字体和背景颜色

.wxml文件:

<view class=”container”>

<button type=”primary” bindtap=”modalcnt1″>改变标题1</button>

<button type=”primary” bindtap=”modalcnt2″>改变标题2</button>

<button type=”primary” bindtap=”modalcnt3″>改变标题3</button>

</view>

.wxss文件:

button{margin: 10px}

.js文件:

Page({

data: {},

modalcnt1: function() {

wx.setNavigationBarTitle({

title: ‘——百家号(标题1)——‘,});

},

modalcnt2: function() {

wx.setNavigationBarTitle({

title: ‘******百家号(标题2)******’,});

},

modalcnt3: function() {

wx.setNavigationBarTitle({

title: ‘++++++百家号(标题3)++++++’,});

},})

 

2、动态的改变标题背景颜色

.wxml文件:

<view class=”container”>

<button type=”primary” bindtap=”modalcnt1″>改变标题背景颜色为米白</button>

<button type=”primary” bindtap=”modalcnt2″>改变标题背景颜色为灰色</button>

<button type=”primary” bindtap=”modalcnt3″>改变标题背景颜色为雅红</button>

</view>

.wxss文件:

button{margin: 10px}

.js文件:

const app = getApp()

Page({

data: {},

modalcnt1: function() {

wx.setNavigationBarColor({

frontColor: ‘#000000′,

backgroundColor: ‘#ffa’,

animation: {

duration: 500,

timingFunc: ‘linear’}});},

modalcnt2: function() {

wx.setNavigationBarColor({

frontColor: ‘#000000′,

backgroundColor: ‘#ccc’,

animation: {

duration: 500,

timingFunc: ‘linear’}});},

modalcnt3: function() {

wx.setNavigationBarColor({

frontColor: ‘#000000′,

backgroundColor: ‘#f20′,

animation: {

duration: 500,

timingFunc: ‘linear’}});},})

 

 

头像

关于微信小程序设置背景图片不显示问题

在小程序开发的时候,设置页面的背景,css代码如下:

.bgp{ width: 100%; height: 220px; background: url(‘../img/images.jpg’) no-repeat; background-size: 100% 100%; }

或者换成行内来实现,在调试工具上都是可以显示的,但是扫面上传到手机上却显示不出来,这是为什么呢?

这是由于:background-image 只能用网络url或者base64图片编码 , 本地图片只能用 image标签src属性才行。当然 image标签src属性也可以使用网络url或者base64图片编码。

下面通过 image 标签src属性设置,实现背景图显示

<image src=”/assets/images/timg.jpg” class=”bgp”></image>
wxss样式:
.bgp{
position:fixed;
width:100%;
height:100%;
z-index:-1;
opacity:0.8;
}
头像

微信小程序拾色器(颜色选择器)组件 we-color-picker

安装使用

git

git clone https://github.com/KirisakiAria/we-color-picker.git

将项目中src目录下的全部文件拷贝到/components/color-picker中,在使用该组件的页面对应json文件中添加:

"usingComponents": {
    "color-picker":"/components/color-picker/color-picker"
}

截图示例

仿照PS的色相立方体制作而成

小程序颜色选择器

 

WXML

<color-picker class="color-picker" colorData="{{colorData}}" rpxRatio="{{rpxRatio}}" bindchangecolor="onChangeColor"></color-picker>

可能导致错误的样式问题

❗❗ color-picker自身和其祖先元素切勿使用定位样式(除非拾色器右上角与页面右上角重合的特殊情况),否则将导致拾色器选择点位置错误。

参数

colorData: {
    //基础色相,即左侧色盘右上顶点的颜色,由右侧的色相条控制
    hueData: {
        colorStopRed: 255,
        colorStopGreen: 0,
        colorStopBlue: 0,
    },
    //选择点的信息(左侧色盘上的小圆点,即你选择的颜色)
    pickerData: {
        x: 0, //选择点x轴偏移量
        y: 480, //选择点y轴偏移量
        red: 0, 
        green: 0,
        blue: 0, 
        hex: '#000000'
    },
    //色相控制条的位置
    barY: 0
},
rpxRatio: 1 //此值为你的屏幕CSS像素宽度/750,单位rpx实际像素


//设置rpxRatio
wx.getSystemInfo({
    success(res) {
        _this.setData({
            rpxRatio: res.screenWidth / 750
        })
    }
})

事件

//选择改色时触发(在左侧色盘触摸或者切换右侧色相条)
onChangeColor(e) {
    //e.detail.colorData与参数中的colorData一致
}

多个拾色器的情况

WXML

<color-picker data-id="0" class="color-picker" colorData="{{colorData0}}" rpxRatio="{{rpxRatio}}" bindchangecolor="onChangeColor"></color-picker>
<color-picker data-id="1" class="color-picker" colorData="{{colorData1}}" rpxRatio="{{rpxRatio}}" bindchangecolor="onChangeColor"></color-picker>
<color-picker data-id="2" class="color-picker" colorData="{{colorData2}}" rpxRatio="{{rpxRatio}}" bindchangecolor="onChangeColor"></color-picker>
<!--More...-->

JS

//设置多个参数即可
colorData0: {
    //...
},
colorData1: {
    //...
},
colorData2: {
    //...
},
//More...

onChangeColor(e) {
    //这里我使用了dataset来存储标志,用来判断时哪个拾色器发生变化
    const index = e.target.dataset.id
    this.setData({
        [`colorData${index}`]: e.detail.colorData
    })
}

 

文章转自:https://developers.weixin.qq.com/community/develop/doc/00084ae5e400a8ae58e78263553c06

头像

小程序 navigator 和 API中wx.的跳转(如 wx.navigateTo、wx.reLaunch等)

navigator 和 各种跳转API的区别:
  • wx.navigateTo  用于保留当前页面、跳转到应用内的某个页面,使用 wx.navigateBack可以返回到原页面。对于页面不是特别多的小程序,通常推荐使用 wx.navigateTo进行跳转, 以便返回原页面,以提高加载速度。当页面特别多时,则不推荐使用。

 

  • wx.redirectTo  当页面过多时,被保留页面会挤占微信分配给小程序的内存,或是达到微信所限制的 5 层页面栈。这时,我们应该考虑选择 wx.redirectTo。wx.redirectTo()用于关闭当前页面,跳转到应用内的某个页面。这样的跳转,可以避免跳转前页面占据运行内存,但返回时页面需要重新加载,增加了返回页面的显示时间。

 

  • wx.reLaunch   wx.reLaunch()与 wx.redirectTo()的用途基本相同, 只是 wx.reLaunch()先关闭了内存中所有保留的页面,再跳转到目标页面。

 

  • wx.switchTab  对于跳转到 tab bar 的页面,最好选择 wx.switchTab(),它会先关闭所有非 tab bar 的页面。其次,也可以选择 wx.reLaunch(),它也能实现从非 tab bar 跳转到 tab bar,或在 tab bar 间跳转,效果等同 wx.switchTab()。使用其他跳转 API 来跳转到 tab bar,则会跳转失败。

 

  • wx.navigateBack  用于关闭当前页面,并返回上一页面或多级页面。开发者可通过 getCurrentPages() 获取当前的页面栈,决定需要返回几层。这个 API 需要填写的参数只有 delta,表示要返回的页面数。若 delta 的取值大于现有可返回页面数时,则返回到用户进入小程序的第一个页面。当不填写 delta 的值时,就默认其为 1(注意,默认并非取 0),即返回上一页面。
 如若有误,欢迎指正~