qshinoの日記

Powershell関係と徒然なこと

intel core i

core i generation

第1世代Nehalemマイクロアーキテクチャ

第2世代Sandy Bridgeマイクロアーキテクチャ

第3世代Ivy Bridgeマイクロアーキテクチャ

第4世代Haswellマイクロアーキテクチャ

第5世代Broadwellマイクロアーキテクチャ

14nm shrink version

第6世代Skylakeマイクロアーキテクチャ

New architecture

14nm islael hifa z170, h170 chipset dmi 3.0

第7世代Kaby Lakeマイクロアーキテクチャ

process improve

14nm+

kabylake refresh / 第8世代?

第8世代Coffee Lakeマイクロアーキテクチャ

new process

2017/9/24 発表 14nm ++ z370, z390 chipset dmi 3.0

第9世代Coffee Lake-Refreshマイクロアーキテクチャ

2018/10/8 発表

minor update

以後は予定

第10世代 Icelake

参考

f:id:qshino:20190523004027j:plain

802.1x 有線lan ubuntu

有線LANの802.1x認証

概要

  1. /etc/wpa_supplicant/wpa_supplicant.conf
  2. 試行
  3. /etc/network/interfaces
  4. sudo /etc/init.d/networking restart

conf

# Where is the control interface located? This is the default path:
ctrl_interface=/var/run/wpa_supplicant
 
# Who can use the WPA frontend? Replace "0" with a group name if you
#   want other users besides root to control it.
# There should be no need to chance this value for a basic configuration:
ctrl_interface_group=0
 
# IEEE 802.1X works with EAPOL version 2, but the version is defaults 
#   to 1 because of compatibility problems with a number of wireless
#   access points. So we explicitly set it to version 2:
eapol_version=2
 
# When configuring WPA-Supplicant for use on a wired network, we don’t need to
#   scan for wireless access points. See the wpa-supplicant documentation if
#   you are authenticating through 802.1x on a wireless network:
ap_scan=0
 
network={
        key_mgmt=IEEE8021X
        eap=PEAP
        identity="myid"
        password="mypw"
        phase1="peaplabel=1"
        phase2="auth=MSCHAPV2"
}

試行

wpa_supplicant -c /etc/wpa_supplicant/wpa_supplicant.conf -Dwired -ieth0

/etc/network/interfaces

# DHCPなら----
#auto wlan0
#iface wlan0 inet dhcp
#wpa-conf       /etc/wpa_supplicant/wpa_supplicant.conf
# ------------
 
# 固定IPなら--
auto wlan0
iface wlan0 inet static
address <IPアドレス>
netmask <サブネットマスク>
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
gateway <ゲートウェイIP>
# -----------

ネットワーク再起動

sudo /etc/init.d/networking restart

参考

centos x 有線LAN x 802.1x

https://ccie-go.com/centos-8021x-config/

ubuntu x wifi x 802.1x x 自動起動

https://vok.paburica.com/index.php?LinuxTips%2F無線LANの設定をしたい%28Ubuntu%29

ununtu x wifi x 802.1x cli x 試行

https://www.xmisao.com/2014/01/16/how-to-connect-wpa2-wireless-lan-using-wpa-supplicant.html

git http server setup

git httpサーバ設定手順

  1. sv: リポジトリ用意
  2. sv: apache2
  3. sv: リポジトリ更新
  4. cl: クライアント設定

1. リポジトリ準備

$ sudo apt-get install git

次に「/home/user/git/project.git/」にリモートリポジトリを作成します。

$ mkdir git $ cd git $ git init --bare --shared project.git

作成したリポジトリ全体について、Apacheユーザのアクセス権を与えます。Apacheユーザはデフォルトでは「www-data」です。

$ sudo chown -R www-data:www-data project.git

リポジトリの準備は以上です。

2. Apache設定

リモートリポジトリにはsvn、http、httpsプロトコルを使用した接続がありますが、今回はローカルからVirtual Hostを使ってhttpでアクセスすることにします。

まずは、Virtual Hostの設定ファイルを「/etc/apache2/sites-available/001-git.conf」を用意し、以下の内容を記述します。ファイル名「001-git.conf」は任意です。

ServerName git.localhost DocumentRoot /home/user/git/

ServerAdmin webmaster@localhost

ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined

SetEnv GIT_PROJECT_ROOT /home/user/git/
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git/ /usr/lib/git-core/git-http-backend

<Location />
    Order allow,deny
    Allow from all
    AuthType Basic
    AuthName "git repository"
    AuthUserFile /etc/apache2/git.passwd
    Require valid-user
</Location>

ポイントとしてはVirtual Hostを有効にするためにServerName、リポジトリを作成したディレクトリにDocumentRootを設定します。 gitコマンドを利用するためにDocumentRootと同じディレクトリにGIT_PROJECT_ROOT、また、GIT_HTTP_EXPORT_ALLとScriptAliasを設定します。 アクセス制限を設けるため、apache2でパスワード管理ファイル「/etc/apache2/git.passwd」を別途用意します。

書き終えたら、設定ファイルを有効にして、apacheを再起動します。

$ sudo a2ensite 001-git.conf
$ sudo service apache2 restart

HTTPでリモートリポジトリからcloneしてみる

それでは実際にリモートリポジトリをcloneしてみます。 今回はローカル環境でVirtual Hostを利用するので、ファイル「/etc/hosts」に先ほどServerNameに設定したサーバ名を記述します。

127.0.0.1 git.localhost $ mkdir myproject $ cd myproject $ git clone http://git.localhost/project.git . Cloning into '.'... Username for 'http://git.localhost': user Password for 'http://user@git.localhost': Checking connectivity... done. apache2で設定したユーザ名とパスワードを入力して、.gitが生成されれば一通り設定成功です。 commit、push、pullコマンドも試してみましょう。

リモート接続できない場合

私のケースですが、初めてリモートからcloneする時に、以下のエラーが発生しました。

fatal: repository 'http://git.localhost/' not found clone、pull、pushする際に、リポジトリフォルダ内で以下のコマンドを実行する必要があるようです。

$ cd /home/user/git/project.git/ $ git update-server-info Related posts:

ref

https://helog.jp/git/http/

example gst plugin

gles2.c

/* * Copyright (C) 2008-2010 Felipe Contreras * Copyright (C) 2012 matsi * * Originated from gst-omapfb by Felipe Contreras <felipe.contreras@gmail.com> * * This file may be used under the terms of the GNU Lesser General Public * License version 2.1, a copy of which is found in LICENSE included in the * packaging of this file. */ 

#include <sys/ioctl.h>
#include <sys/mman.h>
#include <inttypes.h>
#include <stdbool.h>
#include <pthread.h>
#include <semaphore.h>
#include <stdlib.h>
#include <stdint.h>
#include <unistd.h>
#include <string.h>
#include <fcntl.h>
#include <stdio.h> 
#include <gst/gst.h>
#include <gst/base/gstbasesink.h> #include "gles2util.h"
#include "gles2.h" 

/* */ 

GLuint *img_ptr;
GLuint img_h;
GLuint img_w; 

#if 0
sem_t gles2_sem;
#else
volatile gint gles2_sem;
#endif 

bool glt_active;
pthread_t glt;
 /* */ 
static void *parent_class; 
struct gst_gles2_sink {    
  GstBaseSink parent;
}; 
struct gst_gles2_sink_class {    
  GstBaseSinkClass parent_class;
}; 

/* */ 

static GstCaps * generate_sink_template(void){
  GstStructure *struc;  
  GstCaps *caps;    

  fprintf(stderr, "--> %s\n", __func__);

  caps = gst_caps_new_empty();  
  struc = gst_structure_new(
    "video/x-raw-rgb",   
    "width", 
    GST_TYPE_INT_RANGE,  16, 4096,    
    "height", 
    GST_TYPE_INT_RANGE, 16, 4096,
    "bpp", G_TYPE_INT, 32,
    "depth", G_TYPE_INT, 24,            
    "endianness", G_TYPE_INT, 4321,     
    "green_mask", G_TYPE_INT, 16711680, 
    "blue_mask", G_TYPE_INT, 65280,         
    "red_mask", G_TYPE_INT, -16777216,      
    "framerate",   
      GST_TYPE_FRACTION_RANGE,
       0, 1, 30, 1,         
    NULL); 

    gst_caps_append_structure(caps, struc);     
  return caps;
} 

static gboolean setup(struct gst_gles2_sink *self, GstCaps *caps){
    GstStructure *structure;
    int bufsize, width, height; 

      fprintf(stderr, "--> %s\n", __func__);   
    structure = gst_caps_get_structure(caps, 0); 
    gst_structure_get_int(structure, "width", &width);   
  gst_structure_get_int(structure, "height", &height); 
    img_h = height;
    img_w = width; 
    bufsize = img_h * img_w * 4;
    if (posix_memalign((void **) &img_ptr, 4, bufsize)) {       
     fprintf(stderr, "Error allocating frame buffers: %d bytes\n", bufsize);      
     return false;
    } 

#if 0 
  sem_init(&gles2_sem, 0, 1);
#else   
  gles2_sem = 0;
#endif
    glt_active = true; pthread_create(&glt, NULL, gles2_thread, NULL); 
    return true;
} 

static gboolean setcaps(GstBaseSink *base, GstCaps *caps){ 
    struct gst_gles2_sink *self = (struct gst_gles2_sink *)base;  
    return setup(self, caps);
} 

static gboolean start(GstBaseSink *base){  
  struct gst_gles2_sink *self = (struct gst_gles2_sink *)base;    
  fprintf(stderr, "--> %s\n", __func__); 
    if (0 > gles2_start()) {      
    return false;    
  }
    return true;
} 

static gboolean stop(GstBaseSink *base){   
  struct gst_gles2_sink *self = (struct gst_gles2_sink *)base; 
    fprintf(stderr, "--> %s\n", __func__);        
  return true;
} 

static GstFlowReturn render(GstBaseSink *base, GstBuffer *buffer){ 
    struct gst_gles2_sink *self = (struct gst_gles2_sink *)base;  
    fprintf(stderr, "--> %d\n",    
        GST_BUFFER_SIZE(buffer)); 

#if 0  
    sem_wait(&gles2_sem);     
    memcpy(img_ptr,    
      GST_BUFFER_DATA(buffer),  
      GST_BUFFER_SIZE(buffer)); 
      sem_post(&gles2_sem);
#else   if 
 (g_atomic_int_compare_and_exchange(&gles2_sem, 0, 1)) {  
    memcpy(img_ptr, 
    GST_BUFFER_DATA(buffer),  
    GST_BUFFER_SIZE(buffer));       
    g_atomic_int_set(&gles2_sem, 2);
    } 
#endif 

    if (!glt_active)      
    return GST_FLOW_UNEXPECTED; 
  return GST_FLOW_OK;
} 

static void class_init(void *g_class, void *class_data){
    GstBaseSinkClass *base_sink_class;
  fprintf(stderr, "--> %s\n", __func__);   
  base_sink_class = g_class;
  parent_class =  g_type_class_ref(
    GST_GLES2_SINK_TYPE);   

  base_sink_class->set_caps = setcaps;      
  base_sink_class->start = start;    
  base_sink_class->stop = stop;  
  base_sink_class->render = render;  
  base_sink_class->preroll = render;
} 

static void base_init(void *g_class){
    GstElementClass *element_class = g_class;
    GstPadTemplate *template;

  fprintf(stderr, "--> %s\n", __func__);   

  gst_element_class_set_details_simple(
    element_class,  
        "Experimental GLES2 plugin",
    "Sink/Video",
    "Renders video with gles2",  
    "matsi");

    template = 
            gst_pad_template_new("sink",   
              GST_PAD_SINK,         
              GST_PAD_ALWAYS,           
              generate_sink_template());

  gst_element_class_add_pad_template(
    element_class, template);
  gst_object_unref(template);
}

GType gst_gles2_sink_get_type(void){
    static GType type;

    fprintf(stderr, "--> %s\n", __func__);     

  if (G_UNLIKELY(type == 0)) {       
    GTypeInfo type_info = { 
        .class_size = sizeof(struct  
      gst_gles2_sink_class),
        .class_init = class_init,       
       .base_init = base_init,      
        .instance_size = sizeof(struct gst_gles2_sink),      
};      

    type = g_type_register_static(
      GST_TYPE_BASE_SINK,         
      "GstGles2Sink", &type_info, 0);   

  }     
  return type;
} 

static gboolean plugin_init(GstPlugin *plugin){    

  fprintf(stderr, "--> %s\n", __func__); 

    if (!gst_element_register(plugin,  
    "gles2sink", 
    GST_RANK_SECONDARY,  
    GST_GLES2_SINK_TYPE))   
      return false; 
    return true;
} 

GstPluginDesc gst_plugin_desc = {   
  .major_version = GST_VERSION_MAJOR,   
  .minor_version = GST_VERSION_MINOR,
  .name = "gles2",   
  .description = (gchar *) "Experimental GLES2 plugin",  
  .plugin_init = plugin_init,
  .version = VERSION,   
  .license = "LGPL",
  .source = "source",    
  .package = "package",
  .origin = "origin",
};

shutil.c

/* shader utilities */ 
#include <stdlib.h>
#include <stdio.h> 
#include "shutil.h" 

char *shader_fread(char *name){   
  char *buffer;
    long fsize;    
  FILE *fh; 
    buffer = NULL; 

  fh = fopen(name, "r"); 

    if (fh) { 
        fseek(fh, 0L, SEEK_END);  
    fsize = ftell(fh);  
    rewind(fh);         
     buffer = (char *) calloc(1, fsize); 

        if (buffer) {         
       fread(buffer, fsize, 1, fh);    
        }       
    fclose(fh);
    } else {      
    perror("can't open shader file");    
  }
    return buffer;
}

gstreamer example

tutorial

basic-tutorial-1.c

#include <gst/gst.h> 

int main (int argc, char *argv[]) { 
  GstElement *pipeline; GstBus *bus;   
  GstMessage *msg; 

  /* Initialize GStreamer */ 

  gst_init (&argc, &argv); 

  /* Build the pipeline */ 

  pipeline = gst_parse_launch ("playbin uri=https://www.freedesktop.org/software/gstreamer-sdk/data/media/sintel_trailer-480p.webm", NULL); 

  /* Start playing */

  gst_element_set_state (pipeline, GST_STATE_PLAYING); 

  /* Wait until error or EOS */

  bus = gst_element_get_bus (pipeline);
  msg = gst_bus_timed_pop_filtered (bus, GST_CLOCK_TIME_NONE, GST_MESSAGE_ERROR | GST_MESSAGE_EOS); 

  /* Free resources */

  if (msg != NULL)
     gst_message_unref (msg);

  gst_object_unref (bus);   
  gst_element_set_state ( pipeline, GST_STATE_NULL);
  gst_object_unref (pipeline); 

  return 0; 
} 

ref

https://gstreamer.freedesktop.org/documentation/tutorials/basic/hello-world.html?gi-language=c

夢幻の世界の扱い方

夢幻ではなく、無限

  1. Policy
  2. Process
  3. Post Action
  4. そして、無限に繰り返す。

無限

無限の世界は限りがない。有限の物をどれだけ集めようと、無限を埋め尽くす事はできない。

無限を埋め尽くす事ができるのは、同じ次元以上の無限だけ。

無限の次元を把握し、次元に合わせた無限で対応する。

可能であれば、無限の次元を落とし、より扱いやすくする。