分类目录归档:编程

# leetcode 相交链表

点击量:10

这是leetcode的解题报告。ARTS很想加入,但是因为自己懒,本身也做了这些事情,因此就一直都在拖,希望这周能够搞定。

origin

from leetcode

road

相交链表,两个指针分别遍历两个链表即可,具体可以画图来表示,两个链表,一个长度为 a+c,另一个长度为 b+c,两个指针势必会在 a+b+c 的位置相遇。

solution

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
        ListNode *w1, *w2;
        w1 = headA;
        w2 = headB;
        if (!w1 || !w2) {
            return NULL;
        }
        while (w1 != w2) {
            if (!w1)
                w1 = headB;
            else
                w1 = w1->next;
            if (!w2)
                w2 = headA;
            else
                w2 = w2->next;
        }
        return w1;
    }
};

我的vim配置

点击量:3

现在使用vim最好是使用neovim或者vim8版本,来获得async特性,防止运行补全命令的时候卡顿。

我的配置文件在coding gist

相应的安装方法也写在其中。

插件管理器

安装我的配置文件,首先需要安装一下插件管理器。

curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
    https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

使用字体:

nerd-fonts https://github.com/ryanoasis/nerd-fonts/tree/master/patched-fonts

运行

把.vimrc移动到~/.vimrc

打开vim,输入::PlugInstall

安装完成即可。

语言补全

需要个别语言的补全,查看completor

因为是自己手动慢慢写成的vim配置,因此想要我定制或者修改不需要额外的学习成本。如果想要更好的配置,可以考虑spacevim,SpaceVim是参考Spacemacs制作的IDE,非常有趣,二者相爱相杀,促成的产物。

使用fish – 一个新的shell

点击量:4

许多人都在推荐fish-shell,比如说阮一峰大佬和Reitz神;因此也要试试fish的魅力。虽然已经是z和zsh的老用户,但是对于效率的极致追求不能停。

注意:fish仅适用于某些开发场景,目前不适用于所有开发场景——在其他许多shell环境中,由于历史因素以及已经构建完成的大量生态,对于当前的开发影响是巨大的。

fish基本操作

fish不仅仅使用tab进行不全,还可以使用ctrl+f或者alt+f进行全行不全。

fish还可以通过安装oh-my-fish,对应到z-shell的oh-my-zsh。不过,一般情况下,fish本身就已经做的够好了,基本不需要再进行更多的配置。

fish中的export

使用set -x来替代。例如set -x HOME /home/svtter,即export HOME=/home/svtter

后记

后来我还是切换回了zsh;我使用的开发环境对于zsh已经支持的很好了,但是对于fish的支持还是差强人意。学习新的技术是需要成本的,如果有时间就对fish的支持进行完善,如果没时间,那么还是等它更加成熟再使用吧。

参考

http://www.ruanyifeng.com/blog/2017/05/fish_shell.html

使用Docker时遇到的sitemap问题

点击量:2

这两天感觉博客访问量已经不能靠用嘴宣传了,于是决定做一下sitemap,但是发现django自带的sitemap生成器存在这样的问题:生成的sitemap是依照container的hostname来显示的。

为此我查询了一下其他人是怎么搞的,发现他们都把nginx和django放在一个容器下——但是如此构建不仅麻烦,似乎违背了docker的构建思路,在一个container里面放了多个进程。因此,我认为下面的方案是合理的。

解决方案

Enabling the sites framework

To enable the sites framework, follow these steps:

Add ‘django.contrib.sites’ to your INSTALLED_APPS setting.

Define a SITE_ID setting:

SITE_ID = 1

Run migrate.

django.contrib.sites registers a post_migrate signal handler which creates a default site named example.com with the domain example.com. This site will also be created after Django creates the test database. To set the correct name and domain for your project, you can use a data migration.

In order to serve different sites in production, you’d create a separate settings file with each SITE_ID (perhaps importing from a common settings file to avoid duplicating shared settings) and then specify the appropriate DJANGO_SETTINGS_MODULE for each site.

>>> from django.contrib.sites.models import Site
>>> one = Site.objects.all()[0]
>>> one.domain = 'myveryspecialdomain.com'
>>> one.name = 'My Special Site Name'
>>> one.save()

代码写多了,对于Flask和Django也就十分释然了。两个东西都是利器,针对的东西不是很相同;编程语言也是,都有自己擅长的部分,如果你非要用某种编程语言花很大的力气去做一件小事,除非你是geek而且有追求,并且没有deadline在旁边催催催,否则不建议你这么做。

参考项目

https://github.com/flyhigher139/mayblog

给小白的IPython Notebook指南

点击量:2

这是给“小白”的notebook指南。notebook是算法开发经常使用的工具。

安装notebook

$ pip install notebook

运行notebook

$ jupyter-notebook .

在终端下运行这个命令可以启动notebook

使用IPython-Notebook

点击右方的New按钮,选择Python3,以此来启动一个新的NoteBook。

这时会新创建一个文件。

In [ ]:后输入要运行的代码,然后点击Run即可运行。例如:

使用Terminal

Terminal就是之前在Windows下的cmd,MacOS下的terminal,点击之后见到这个界面:

尝试输入python,就可以像之前那样进行命令行编程了。

快速git指南

点击量:3

git是一个版本控制工具,通过git我们可以解决许多版本冲突,以及协同开发的问题。

git安装

Windows可以通过安装文件直接安装,Linux可以通过apt-get install git安装,OSX可以通过brew install git来安装git。

初始化当前目录为git项目

$ git init .

这个操作的意思是,把当前项目使用git进行管理。此时会创建一个.git文件夹。

添加当前文件的改动,并且提交

$ git add .
$ git commit -m 'update message'

如果修改了文件,文件的变动没有被git记录。这个时候运行上述命令,就可以把变动记录下来。

推送到远程仓库

$ git push

获取远程仓库的更新

$ git pull

下载git仓库

$ git clone ${仓库的URL}

例如,下载这个项目breastCancer,可以使用如下的命令

$ git clone https://github.com/Svtter/breastCancer

通过这个操作就可以下载这个仓库。

可视化当前更新

例如

点击first commit,即可看到这次提交的相关改动。

其他的问题

如果出现conflict以及其他的问题,可以通过google自行搜索解决。

可参考的资料

阿里云使用VNC

点击量:2

本来想用阿里云做vnc来远程一下完成一些事情,但是无奈速度有点慢,而且源还偶尔出问题,update能不能成功完全看脸【经常碰到,没有修改过aliyun的source】。不成功的表现是,apt-get告诉我broken depends,em….

不过不是很妨碍相关的使用【才怪】。这是官方教程

使用vnc在官方的教程上要这样修Xstartup才行。测试环境ubuntu 14.04

#!/bin/sh
export XKL_XMODMAP_DISABLE=1
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &
gnome-panel &
gnome-settings-daemon &
metacity &
nautilus &
gnome-terminal &

ThinkPHP开发要素

点击量:3

近日因项目需要,使用ThinkPHP3.1进行开发,记录几个要素。要素文章主要目的是把容易忘记的记录下来。

ThinkPHP习惯性使用一个入口,一般是index.php,后面的路由等跟进。一般情况下,在部署的时候会将这个要素隐藏起来,不直接显示。

继续阅读

C- tips

点击量:4

最近做了一部分硬件的工作,重新对C语言的一部分知识进行了学习,发现了之前做算法
不太注意的部分,补充在这里。

函数指针

函数指针是指向函数的指针变量。也就是说这个变量里面存的值是函数的地址,在调用
的时候可以通过变量名来调用。

通过此方式来声明,调用:

继续阅读