Skip to content

Instantly share code, notes, and snippets.

View progre's full-sized avatar

progre progre

View GitHub Profile
@progre
progre / Vagrantfile
Created February 2, 2014 14:46
AnsibleをゲストOSに押し込んでVagrant環境構築する ref: http://qiita.com/progre/items/ccc2d8c2ec7ae8a4ed61
Vagrant.configure("2") do |config|
config.vm.box = "precise64"
config.vm.box_url = "http://files.vagrantup.com/precise64.box"
config.vm.synced_folder ".", "/vagrant", :mount_options => ['dmode=775', 'fmode=664']
config.vm.provision "shell", :path => "provision.sh"
end
@progre
progre / file0.txt
Created February 22, 2014 16:33
こまけぇこたぁいいんだ!MVWだ! ref: http://qiita.com/progre/items/f50846ee33af2e6f2dc7
import opening = require('./domain/app/opening'); // <-- インポートして
var app = angular.module('app', ['ngRoute', 'ngAnimate']);
// 中略
app.controller('IndexController', [
() => opening() // <-- コール
]);
<UserControl x:Class="wmvplayer.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="400">
<Grid x:Name="LayoutRoot" Background="Black" Width="640" Height="480">
<MediaElement Width="640" Height="480" Name="MediaElement" Source="mms://localhost:7144/stream/【stream id】.wmv?tip=【ip】" AutoPlay="True"></MediaElement>
</Grid>
@progre
progre / gist:854a9f60dd8a40692d8b
Created October 2, 2014 13:10
httpsにhttpproxyでつなぎに行く
var https = require('https');
var tunnel = require('tunnel');
var tunnelAg = tunnel.httpsOverHttp({
proxy: {
host: 'localhost',
port: 8080
}
});
var options = {
ffmpeg -i http://127.0.0.1:7144/stream/a1ec070928dc66e5590831fdf7a29e24.flv -acodec mp3 -ab 48k -vcodec libx264 -profile:v baseline -level 3.0 -vb 50k -f segment -segment_format mpegts -segment_time 2 -segment_list playlist.m3u8 -segment_list_flags live -segment_list_type hls -segment_list_size 2 stream_%d.ts
@progre
progre / gist:adebe3fab379c2f5db97
Created March 17, 2015 12:37
TCPを流れるPCPの仕組み

ヘッダーについて

  • 2種類ある
    • チャンネルに対してリレー要求する場合はHTTP
    • それ以外は'pcp\n'Atom
  • どっちかを送ったら以降はAtomでやりとり

ハンドシェイクの仕方

mcp(Minecraft Coder Pack:9.05[9.05]):minecraft.jar
FML(Forge Mod Loader:7.10.85.1291[7.10.85.1291]):forge-1.7.10-10.13.2.1291.jar
Forge(Minecraft Forge:10.13.2.1291[10.13.2.1291]):forge-1.7.10-10.13.2.1291.jar
appliedenergistics2-core(AppliedEnergistics2 Core:rv2-beta-31[rv2-beta-31]):minecraft.jar
<CJB ASM>(<CJB ASM Data Initialization>:000[000]):minecraft.jar
CodeChickenCore(CodeChicken Core:1.0.4.35[1.0.4.35]):minecraft.jar
MVB-COREMOD(More Village Biomes+:2.0.6.5[2.0.6.5]):minecraft.jar
NotEnoughItems(Not Enough Items:1.0.4.83[1.0.4.83]):NotEnoughItems-1.7.10-1.0.4.83-universal.jar
PlayerAPI(Player API:1.1[1.1]):minecraft.jar
RenderPlayerAPI(Render Player API:1.1[1.1]):minecraft.jar
@progre
progre / gist:860f4f9019f6d6f56f86
Last active August 29, 2015 14:23
ComputerCraftからOpenComputersへのスクリプト移行メモ
  • getItemCount([slot]) → count([slot])
  • getSelectedSlot() → select()
  • getItemSpace([slot) → space([slot])
  • inspect() → geolyzer.analyze(3)
  • inspectUp() → geolyzer.analyze(1)
  • inspectDown() → geolyzer.analyze(0)
  • 左 → geolyzer.analyze(5)
  • 右 → geolyzer.analyze(4)
  • 後ろ → geolyzer.analyze(2) analyze戻り値の

モチベーション

  • 何も考えずにバケツリレーするのも効率悪いからもっと頭いい感じに流すようにしよう
  • 実装難易度下げてマルチプラットフォーム展開しやすくしよう
  • ニコ生()とのすみ分け(?)ができるようにしよう

メモ

  • 中央サーバー系の弱点は高ビットレートかつ多人数配信が難しいこと。
    • ニコ生で4~500kbpsくらいだったはず。ただしYouTubeLiveは6000kbpsいけるらしいので本気出されると死ぬ(liveを広めるモチベ低そうだし現実的には無理なのかも)
    • PeerCastだとリスナーの帯域さえあればこれが実現できるのが強み
  • 高画質を必須とするコンテンツがあるとなお強くなりそう
@progre
progre / gist:4272968
Created December 13, 2012 00:23
Maybe Monad on C#
static class MaybeExtensions
{
public static TResult Bind<TSender, TResult>(this TSender obj, Func<TSender, TResult> func)
{
if (obj == null)
return default(TResult);
return func(obj);
}
}