Category Archives: Uncategorized

Install PHP7 on Debian 8 Jessie (with Apache)

Important:

Double check your operate system: ONLY  Debian 8 (Jessie) works with this instruction

Apache version: 2.4 which is the default version comes with Debian 8 (Not working with Apache 2.2 or lower)

Install Apache2:

Update package list and upgrade outdated packages:

sudo apt-get update && sudo apt-get upgrade

Install Apache2:

sudo apt-get install apache2

Install PHP7:

Since PHP7 is not included in any Debian official source list, we gonna use the version compiled by Dotdeb.org, which is pretty widely used.

Add source:

sudo nano /etc/apt/sources.list

Add the following two lines to the end of the file:

deb http://packages.dotdeb.org jessie all
deb-src http://packages.dotdeb.org jessie all

If you server is far from US, try find the nearest mirror: https://www.dotdeb.org/mirrors/

Get and Install GnuPG key:

wget https://www.dotdeb.org/dotdeb.gpg
sudo apt-key add dotdeb.gpg

Update packages again

sudo apt-get update

Install PHP7:

here is a list of available packages currently: (By the way, Swoole also work with php7, use ‘pecl install swoole to install’)

php7.0-apcu       php7.0-dbg        php7.0-imagick    php7.0-memcached  php7.0-phpdbg     php7.0-sybase
php7.0-apcu-bc    php7.0-dev        php7.0-imap       php7.0-mongodb    php7.0-pspell     php7.0-tidy
php7.0-bz2        php7.0-enchant    php7.0-interbase  php7.0-msgpack    php7.0-readline   php7.0-xdebug
php7.0-cgi        php7.0-fpm        php7.0-intl       php7.0-mysql      php7.0-recode     php7.0-xmlrpc
php7.0-cli        php7.0-gd         php7.0-json       php7.0-odbc       php7.0-redis      php7.0-xsl
php7.0-common     php7.0-gmp        php7.0-ldap       php7.0-opcache    php7.0-snmp
php7.0-curl       php7.0-igbinary   php7.0-mcrypt     php7.0-pgsql      php7.0-sqlite3

Choose your list of mod, install with php

sudo apt-get install php7.0 php7.0-common php-pear #add your list of mods here

Install mod_php7 for Apache 2.4 and restart apache:

sudo apt-get install libapache2-mod-php7.0
sudo service apache2 restart

That’s it! Done!

 

My note on Installing OpenWRT on Banana Pi R1 (BPi-R1)

Today, I just got my Banana Pi R1.  Here is a simple guide to set it up as an OpenWRT router.

Step 1: Flash the TF(microSD) card.

  • Goto the download page of BPi-R1 (http://www.bananapi.com/index.php/download?layout=edit&id=65)
  • Find and download the latest OpenWRT Image, which is version 4.0 (01/09/2015) as I write this.
  • Write the OpenWRT image to the TF card. I use OS X, here is the code I used in Terminal:
  • Find the disk number of your TF card. Mine is disk2[Bold number may varies on your computer, wrong number will cause serious problem, you will lose your data on the wrong disk]:
    diskutil list

    Unmount it:

    diskutil unmountDisk /dev/disk<strong>2</strong>

    Write the image:

    sudo dd bs=1m if=~/Downloads/BPI-R1_OpenWrt_V4.0.img of=/dev/rdisk<strong>2</strong>
  • If you are using other OS, follow the guide here (From Raspberry Pi, their are all the same except the image)
  • Eject the TF card  from your computer and insert it into Banana Pi.

Step 2: Power On your Banana Pi R1.

  • Plug in the 5V power cord to the correct port, it will power on by itself.
  • HDMI is not working on OpenWRT(only works few seconds while booting)
  • Connect the BPI-R1’s WAN to your home router/switch’s LAN (Assume DHCP is enabled )
  • Find the BPI-R1’s IP address. You may find it in the web management interface of your home router. Scan port 80 and 22 for the whole subnet other wise.
  • use root/admin to login BPI-R1
  • Mostly Done.

After that, I found only 80M(VFAT) + 150M(EXT4) was used on BPI-R1, which waste pretty much space on my 32GB TF card.

Extra Step: Expand the ext4 partition. (Inspired by SaruMaaz)

  • Download Gparted Live
  • Write Image to a Flash Drive (Assume the flash drive is disk2)
    sudo dd bs=4m if=~/Downloads/gparted-live-0.24.0-2-i586.iso of=/dev/rdisk<strong>2</strong>;sync
  • Restart OS X and hold Option key while booting,
  • Chooes ‘EFI Disk’
  • Enter your language code
  • Enter 0 and get to the GUI
  • Plug in the TF card, Find the TF card (mine is sdd)
  • Find the 150M partition, right click, change the size…
  • Apply
  • Done

Netbeans 无法显示中文之解决方案

今天偶然发现Netbeans不能显示中文,本来以为是charset的问题,然后意识到错误的charset会导致乱码,而不是小方块。

经过测试,使用最常用的英文字体,例如Arial, New Times Roman 都可以正常显示中文。其余字体,比如编程常用的MonoSpace,Consolas,Monaco什么的会无法显示中文。如图:

乱码

经过一番搜索,找到原因,简单地说,原因在于这些字体里面不包含中文,fallback font也没有中文.

又搜了一大圈,发现了一个很好的第三方字体,使用Consolas+微软雅黑中文,非常漂亮,成功解决,如图:(如果细心就会发现字数不一样,所以只是我的一个例子么~)

After

 

下载链接:

http://ishare.iask.sina.com.cn/f/8965397.html

备用链接:

YaHei.Consolas.1.12

Practice it CSE142 MT 06au 的一道题

Write a method named hasMidpoint that accepts three integers as parameters and returns true if one of the integers is the midpoint between the other two integers; that is, if one integer is exactly halfway between them. Your method should return false if no such midpoint relationship exists.
The integers could be passed in any order; the midpoint could be the 1st, 2nd, or 3rd. You must check all cases.
Calls such as the following should return true:
hasMidpoint(4, 6, 8)
hasMidpoint(2, 10, 6)
hasMidpoint(8, 8, 8)
hasMidpoint(25, 10, -5)
Calls such as the following should return false:
hasMidpoint(3, 1, 3)
hasMidpoint(1, 3, 1)
hasMidpoint(21, 9, 58)
hasMidpoint(2, 8, 16)
=========================================================
以下是我和晓天想出来的答案。我们最开始打算先进行排序,再求差,来判断,很是程序写起来会很长,而且我们现在没有讲各种排序法。
=========================================================

public static boolean hasMidpoint(int a,int b,int c){
    int e=a+b+c;
    if (e/3==a||e/3==b||e/3==c)
        return true;
    return false;
}

=============================================================

# name expected return your return result
1 hasMidpoint(1, 2, 3) true true pass
2 hasMidpoint(2, 10, 6) true true pass
3 hasMidpoint(0, -50, -25) true true pass
4 hasMidpoint(21, 9, 58) false false pass
5 hasMidpoint(-2, 9, 27) false false pass
=================================================
提交答案之后,我突然觉得这个程序存在问题,虽然在系统给的数值里没有测出问题,但是由于int类数据的特点,10/3是等于3的。所以输入以下测试代码。
==================================================

public class test{
public static void main(String[] args){
System.out.println(hasMidpoint(0,-51,-25));
}
public static boolean hasMidpoint(int a,int b,int c){
int e=a+b+c;
if (e/3==a||e/3==b||e/3==c)
return true;
return false;
}
}

//由于是复制过来的,就不能保持很好的代码格式了。

=============================================================
输出结果:true
=============================================================
很显然,-25不是-51和0的中点,刚刚的源码是有问题的。
=================================================
把if的条件语句作了如下调整:

if ((e/3==a||e/3==b||e/3==c)&&e%3==0)

再次调用

System.out.println(hasMidpoint(0,-501,-250));

输出是false
=================================================
现在基本已经不会存在问题了,通过了我的所有测试。
如果有人认为我的代码还存在问题,欢迎回复。

[C/C++]关于void main和int main的问题

void main与int main之间的区别是什么?”这是一个常见的问题。我们来探讨一下这个问题,并深入研究一些有关main()函数不同版本的更多的东西。

C与C++在main()函数方面的标准有所不同,所以我们要分开讨论。

对于C语言:

在C89标准中,main() 的形式是可以接受的,当然使用如下的C99标准更明智,因为在这个标准中只有如下格式才能被接受:

int main ( void )
int main ( int argc, char *argv[] )

我们可以对main函数做轻微的改变,比如我们可以用一个自定义的类型代替int(当然这个类型必须被定义为int型),还可以把*argv[]改为**argv,等等。

如果我们不想在命令行下对程序输入参数,可以选择第一种形式。

其实第二种形式的两个参数argc,argv的名称是可以改变的,但保持原样是更明智的选择。

main()函数的返回类型必须为int;返回的整形值作为传递给调用者的一个返回码。(this allows a return code to be passed to the invoker)

对于C++:

以下是可以接受的格式:

int main ( int argc, char *argv[] )
int main ()

第一种格式遵从C99标准;第二种格式在不需要通过命令行向程序传递参数时使用,与C99标准中规定的格式int main(void)效果相同。

(C)int main()与int main(void)之间的区别:

很多C程序员都曾搞错的一个概念,就是以为这样一个函数不接受任何参数:

int foo();

事实上,这个函数被认为可以接受未知个数的参数(译:可接受任意多的参数!)。正确的用法是在括号内添加关键字void。

转自: < type="text/javascript">document.write(‘http://qbar.qq.com/u2014091/r/?97’)http://qbar.qq.com/u2014091/r/?97
void main()函数是如何处理的?

在C/C++正规的调用/返回函数中,如果你不想让一个函数返回任何值,你可以使用void定义返回类型。比如,一个不接受任何参数并且无任何返回值的函数原型可以像这样:

void foo(void);

一个常见的误解是,这种逻辑同样适用于main()函数。呵呵,事实并非如此,main()函数是很特殊的,无论何时你都应该依照标准定义main()函数(译:即使用int main()的形式!),并把返回值定义为int。有时void main()的例外形式是可以出现的,但这仅限于某些特定的系统。如果你不敢肯定正在使用这些系统,那么答案很简单,不能使用void main()的形式。

如果你在论坛上写了像“void main”这样的代码而被警告,那么最好改过来。不要用”我的老师告诉我这么做是对的”之类的话来为自己开脱;老师们总是习惯犯错误(teachers have a bad habit of being wrong)。写安全的,合乎标准的代码,大家就可以专注于你程序中其它的问题而不是在这种规范方面的东西上浪费时间。

但是int main(int argc, char *argv[], char *envp[])又是怎么回事呢?

好比是标准的扩展版,main()函数可以在一些系统中提取一个额外的参数用来访问环境变量。这个用法不能保证在每个编译环境中都行得通,所以使用 envp 这个参数是还是谨慎为妙。

最后,关于为什么void main(void)是一种错误的用法,这个链接提供了一些更细节化的背景资料:
http://users.aber.ac.uk/auj/voidmain.shtml
总之,尽量用int main()这个更标准,程序也会更安全。
以上内容来自CSDN博客:http://blog.csdn.net/zdanysdbb/archive/2009/01/13/3758148.aspx
———————————————————————————————————

1。在C++标准中main函数是int的而不是void的。标准C++要求main有int型返回值。而在C中允许void main()即main()无返回值 。C++标准虽然不允许 main为void型,但是在一些编译器比如VC6上允许main为void型, 头文件申明为#include(C++中.h的头文件是对C的支持,是非模板化的) 。但效率低!

2。使用int主要是可以给操作系统返回一个值,让操作系统明白这个程序执行的状态,比如执行这个程序后下一步可能要根据这个返回值做分支处理,如果是void的话就是一个哑巴程序,异常退出和正常推出无法区别,的确移植性很差。

3。1998年后的c++标准写法只有两种:
int main()
int main(int argc, char *argc[])
建议使用这两种之一

4。一定要用的话,可以通过#include来实现对C的支持。
#include
using namespace std;
void main()
{
cout<<"hello,world!"<