月度归档:2014年12月

网络-CDMA接受检验

点击量:5

{% blockquote 本文出自 http://svtter.com svtter.com %}
本文可以随意转载,但是转载请保留本信息.

做CDMA简单的接收处理。

文件

input:

-1 -1 -1  1  1 -1  1  1
-1 -1  1 -1  1  1  1 -1
-1  1 -1  1  1  1 -1 -1
-1  1 -1 -1 -1 -1 -1  1

new.c:

#include <stdio.h>
#include <math.h>
#define M 8
const int b[] = {-1, 1, -3, 1, -1, -3, 1, 1};
void show(int a[])
{
    int i;
    for(i = 0; i < M; i++)
        printf("%5d", a[i]);
    puts("");
}
int main()
{
    int a[M];
    int i;
    freopen('input', 'r', stdin);
    while(1) {
        for(i = 0; i < M; i++) {
            scanf("%d", &a[i]);
        }
        show(a);
        int sum = 0;
        for(i = 0; i < M; i++)
            sum += a[i] * b[i];
        printf("%d\n", sum/M);
    }
    return 0;
}

为了自由

点击量:8

本文出自svtter.com
本文可以随意转载,但是转载请保留本信息.

Linux下自由之路颇为难走 — 也不是很难走,openvpn等等工具都还好,但是因为前几天支付宝刚刚挂
掉 — 好吧,我承认挂掉有些时间了,但是我一直懒得跑银行,反正没了网银也不是不能活。

然后的然后就是自由之路的走法了。因为没有网银,买不了vpn,只能自己好好想办法了。goa.ent我尝
试过,但是因为过于慢的速度和不稳定的因素所以决定作为下下策。另外开源了的go堵起来是不是更容
易呢。。也是醉了。

必须要灭蟑了,真心受不了了,外卖给宿舍带来的是无尽的蟑螂。

archlinux下我给的方案是利用一些自由软件来进行走道,这方面的东西还是比较多的,我就不一一列举
了,但是还是主要针对free.oor来进行。

archlinux或者其他的发行版直接安装wine就可以了,方法也是很简单。怎么安装?举个简单的例子,想
要用什么,就发行版 + wine进行搜索,很快就可以找到了。wine是Linux的windows模拟器,暂且这么
理解吧。

搞好了wine以后,点击运行你下载的软件即可 — 会提示MFC42.dll不存在。然后有些双系统的同志喜欢
从自己的另一个系统里cp到.wine/drive_c/windows/system32或者syswow64下,但是事实上这样解决
不了问题,最好的方法是从百度搜索一个:MFC42.dll winxp这样的比较合适,可能是wine在最初适配
的时候主要使用的这个吧。

成功开启以后,就是代理服务器的问题了。代理服务器方面,个人认为Linux设置起来比windows容易(
也可能是我不太喜欢windows,所以没有认真研究的缘故)。

如果在bash下,使用export http_proxy=localhost:PORT即可。对了,PORT是对应的端口,不要搞错
了。这样在bash下开启的程序都是走代理的,更确切的说是从shell跑的程序都是走的代理。所以要搞什
么系统全局的问题, 不同发行版的问题也就迎刃而解了。

感谢你能够读完这篇文章。

Java-Ant文件和Synastic-Vim支持

点击量:8

{% blockquote 本文出自 http://svtter.com svtter.com %}
本文可以随意转载,但是转载请保留本信息.

本文已经更新,请看 — 如何使用vim开发Java.

本来想把本文命名为使用Vim写Java-Project的,但是个人认为这样并没有很高的开发效率,所以只是提
供一个部分的解决方案,剩下的就由大家努力探索吧。。

Java有个自己构建工程的工具叫做Ant, 全名Apache Ant,好东西,最通俗的解释就是Java的
makefile,这里提供的方案,就是使用Ant或者maven来构建工程,然后通过Synastic的设置,来完成
Java的代码检查。另外,java代码补全设置其实也是有的,但是具体的设置我没有好好研究过,主要是
已经陪不起那个时间了。

另外,Eclipse导出Java项目的时候,一个不错的方法就是Export Ant Buildfiles,这就是ant文件。

Maven我没有好好学,但是看wiki似乎Synastic对maven的支持比ant的支持更加优秀,也可能是mvn的构
建方法上存在优势?这个我不清楚。有时间写一篇文章来好好的研究下。

Ant这个东西构建的包有时候检查会出现问题,(如果采用目录编译的方法,那么就无法检查)。

另外,需要不停的在目录下建立.synastic_javac_config,着实烦人。但是如果使用了全局设置,改
变了配置文件的根目录,也是极为不妥当的(不可能只有一个项目在编辑吧?另外改来改去,也是太麻
烦了。)

就是这样。。更多的是吐槽吧。

对于上一篇文章提到的问题可以用设置classpath来解决。具体方法是将classpath添加到syntastic。
use :SyntasticJavacEditClasspath and add workpath.

Java-import和package的用法

点击量:5

本文出自svtter.com
本文可以随意转载,但是转载请保留本信息.

之前一直都是用eclipse开发Java,Vim修炼到今日,本来想要拉出来溜溜Java,奈何package和import的
机制以及 synastic[自动检查代码的插件] 没有对于eclipse对java包类似的支持,所以只得滚回
eclipse,然后使用vrapper了。

闲话少说,听我细细道来package和import;

这篇文章主要是说明类似这种情况,即不同包但是文件路径一部分相同,即:

  • /temp
    • temp.java
    • tests/
      • joking.java

贴出源代码:

  • test.java:

    package temp;

    import temp.tests.joking;

    public class test {
    public static void main (String args[]) {
    joking a = new joking();
    a.test();
    }
    }

  • joking.java

    package temp.tests;

    public class joking {
    int a = 1;
    public void test() {
    System.out.println(a);
    }
    }

一种编译方法

这个时候打开test.java是没有办法通过拼写验证[synastic],需要这样:

javac -d . /tests/joking.java

然后再打开test.java, 可以了。但是这个时候有个很别扭的问题,我们发现这个时候生成了一个文件
temp/temp/tests/joking.class,也就是说我们的目录现在变成了这个样子:

  • /temp
    • temp.java
    • tests/
      • joking.java
    • temp/
      • test/
        • joking.class

请不要告诉我你很爽,因为这个目录给我的感觉很不爽- -试想,如果我们在别的目录下引用这个包,我
们就需要做很多这样的操作,造成的后果就是各个包里面出现无数个temp/test/joking.class
对我而言这是难以忍受的,我也想不太清楚为什么当初java这么设计 — 可能是为了避免耦合等问题?
软件工程这个地方学得不够好,先mark一下,或者有读者可以给我解释一下这个设计。或者说,下面这
个才是正确的。

另一种编译方法

退出到temp的上级目录,然后进行编译

javac -d . temp/tests/joking.class
javac -d . temp/test.java

然后这样运行:

java temp.test

可是这个时候我们打开temp.java, 利用synastic检查,报错。

总结

最后还是自己对synastic依赖性太强了。但是自己不会写= =,也是无奈了。开个issue求支持吧= =

后记

找到方法了 — 使用ant来构建项目。不过synastic的官方文档并没有说的很清楚,issue看起来又比较
费劲,饿死了,吃饭去。。

Linux-makefile写法

点击量:6

本文出自svtter.com
本文可以随意转载,但是转载请保留本信息.

makefile写法有复杂的有简单的,我这里提到的主要为了做一些简单的开发,所以还是说些简单的事情。

使用makefile之前,要学会使用bash的一些东西。鸟哥的私房菜虽然说是介绍Linux,但是总感觉很多都是介绍bash,以及和
bash配合使用的一些命令。。。

变量的写法

  • 定义的时候直接使用VAR = main.o即可这种格式即可
  • 使用的时候使用${VAR}这种形式来使用,类似于php中的变量。

另外, 位于makefile外面的变量也是可以使用的,使用的时候使用如下格式VAR = main.o make即可,这样就相当于在makefile
定义了一个VAR变量。在外定义的变量是优先于makefile里面的变量的,就像是一个预订义的函数一般。

此外,$@表示当前的目标。如果在clean那里面,$@指的是clean

make + 命令写法

  • 比如make clean的写法,就是在makefile文件中添加

    clean:
    rm .. (类似bash的使用方法,这个地方也可以使用变量)

相对的,install等等的方法就类似于这个上面的写法了。

写到这里也是明白了为什么vim里面有个make命令,却没有各种编译命令了= =

然后附加一个自己写的第一个makefile:(为了读者更加容易理解,我没有使用变量)

run: t2.o test.o
    cc -o run test.o t2.o
    ./run
test.o: test.c
    cc -c test.c
t2.o: t2.c
    cc -c t2.c
clean:
    rm *.o
    rm run

test.c:

#include <stdio.h>
/* #include "t2.h" */
typedef struct test
{
    int a, b;
}test;
test b;
int main(int argc, const char *argv[])
{
    output();
    b.a = 1;
    b.b = 2;
    printf("%d %d\n", b.a, b.b);
    return 0;
}

t2.c:

#include <stdio.h>
void output()
{
    printf("This function is in t2.c\n");
}

文件目录是:
– file
– makefile
– test.c
– t2.c

  • 使用make可以创建链接文件并且运行。
  • 使用make clean可以删除生成的文件。

Linux-软中断通信

点击量:9

本文出自svtter.com
本文可以随意转载,但是转载请保留本信息.

#include <stdio.h>
#include <unistd.h>
#include <signal.h>
#include <unistd.h>
#include <wait.h>
void waiting(), stop(), alarming();
int wait_mark;
int main()
{
    int p1, p2;
    if(p1 = fork())
    {
        if(p2 = fork())
        {
            wait_mark = 1;
            signal(SIGINT, stop);
            signal(SIGALRM, alarming);
            waiting();
            kill(p1, 16);
            kill(p2, 17);
            wait(0);
            wait(0);
            printf("parent process is killed!\n");
            exit(0);
        }
        else
        {
            wait_mark = 1;
            signal(17, stop);
            signal(SIGINT, SIG_IGN);
            while(wait_mark!=0);
            lockf(1,1,0);
            printf("child process2 is killed by parent!\n");
            lockf(1,0,0);
            exit(0);
        }
    }
    else
    {
        wait_mark = 1;
        signal(16, stop);
        signal(SIGINT, SIG_IGN);
        while(wait_mark!=0);
        lockf(1, 1, 0);
        printf("child process1 is killed by parent!\n");
        lockf(1, 0, 0);
        exit(0);
    }
    return 0;
}
void waiting()
{
    sleep(5);
    if(wait_mark != 0)
        kill(getpid(), SIGALRM);
}
void alarming()
{
    wait_mark = 0;
}
void stop()
{
    wait_mark = 0;
}

执行结果

e3.png

生活-吐槽

点击量:10

本文出自svtter.com
本文可以随意转载,但是转载请保留本信息.

今天晚上终于感觉软件工程say goodbye了,这段时间撸了不少js和php,学习的深度以及对面向对象的理解可以说是更深一步。

前端的东西丰富多彩,真是拦不住。从最初的Framework7到bootstrap,从jsp到php(仅仅只是我的学习曲线)。

想起那天有个吐槽node的朋友,说node各种缺点等等。作者不也明确说了,适合大吞吐小计算么。

然后在看hexo的主题,改了改颜色就成了一个新的主题了,还被放在hexo的theme里面了。。真是醉了。

敢情主题就这么匮乏?

大三了才发现有个Student pack,是否一切都已太晚 = =

计算机图形学-相关内容

点击量:1

本文出自svtter.com
本文可以随意转载,但是转载请保留本信息.

本身自己看这些东西没有很简单,但是李老师讲的的确深入浅出,使得同学们更加容易明白。

CSG树

画CSG树很简单,左边为原始元素,右边为变换。原始元素 + 变换 = T 变换, 叶子节点,都是画在图上,T节点也要画在图上。
T变换下的节点不需要重画。U为求并。

四叉树

如果满则为F[ull], 不满则为B[oundary], 空则为E[mpty].

四叉树主要是就是划分,按照象限划分即可,把多重颜色递归的进行划分即可。

中点bresenham算法

  • $ 0 <= k <= 1$

bresenham算法用于绘制直线,可以计算出直线的斜率。

从起点开始,代入x的值,然后求$(2*y_1+1)/2$值。

这个算法就是求两个点的中点,然后取距离中点近的那一个点来绘制直线

下一个点的求法是$(x_1+1,y_1+1), (x_1+1,y_1)$然后求中点,重复过程

以上是原理,下面是求解方法:

  1. 输入直线两个端点$P_0(X_0, Y_0), P_1(X_1,Y_1)$
  2. 首先计算$d = {\Delta}x – 2{\Delta}y$
  3. 绘制点(x,y) 如果$d<0$, 则(x,y)更新为(x+1,y+1),d更新为$d+2{\Delta}x-2{\Delta}y$;
    否则(x,y)更新为(x+1,y),d更新为$d-2{\Delta}y$
  4. 直线没有画完,重复3。

  5. $ k > 1 $

对y的操作搞到x上即可

改进的有效边表算法

?

最小的x 最大的y $1/k$ next

首先构造边表,然后再构造有效边表

按照边数依次扫描

二维变换及二维观察,三维变换以及三维观察

无论是二维还是三维,补充一个1构成[x,y,z,1]矩阵,再对应乘变换矩阵即可。注意的要点是将变换点移动到坐标原点,然后进行
比例变换等。

WEB开发收获

点击量:6

本文出自svtter.com
本文可以随意转载,但是转载请保留本信息.

虽然说很简单的项目还是各种头疼,使用git但是还是问题不断。。

编码的问题

文件的编码,传递数据的编码,数据库的编码都要格外注意才行。UTF-8才是王道啊。

弹出框式

bootstrap的弹出框还是不错的= =,另外amazeUI登录界面等做的不错哈哈= =,作业总算是交上了,差一分满分也是没有办法的事情
啊。ajax方面的不足有时间或者这个假期再来填补吧~

生活-学习归学习,撸代码需谨慎

点击量:5

本文出自svtter.com

这么快就期末了,然而奖学金依然没有到帐,迟迟的健身费用无法归还亲爱的老爹。感受到一丝默默的蛋疼。

然后这两个星期太悲剧了。。自从用了这个域名,居然一个评论都没有。。心塞。评论这个东西就是多了闲多,少了闲少。

在那之后热伤风+感冒,多灾多难。

继续阅读