kenmituoの日記

2006 | 02 | 03 | 04 | 05 | 06 | 07 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 |
2012 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2013 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2014 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2015 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2016 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2017 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2018 | 01 | 02 | 03 | 04 | 05 | 06 |

2018-06-11

[]Date型の日付を日時型にして、タイムゾーンも付けたい

いろいろとややこしい。

someday="yyyy-mm-dd"

1日のさいしょ

Time.zone.parse(someday.to_s)

1日のさいご

d = someday.to_datetime
Time.zone.local(d.year, d.month, d.day, 23, 59, 59)

2018-06-08

[]Railsのcheck_boxの謎

チェックボックをチェック済みにしたい。

チェックされたときに送られるデータはString型の「"1"」、だったら@chk_valに代入してやればチェックされるんじゃないかと思う。

<%= r.check_box(:monthly, {:checked=>@chk_val}) %>

でもならない。

コントローラーでチェックを判定して真ならtrueを入れてやる必要がある。

テキトーなイメージだとこんなかんじ

@user.monthly = ture unless params[:hoge][:monthly].blank?

で、ビューはこれだけ。

<%= r.check_box(:monthly) %>

2018-05-07

[]ビットフラグを追加する

「2つの地区で利用したい」という想定外の使い方をリクエストされて頭を抱えている。

自分の地区以外でもリストに名前を表示するってな感じが目的です。

  • モデルに数値型のotherを作る
  • 4地区をビットで表現して保存するときに10進数にする
  • 編集は強引に2進数に戻す

4地区で5ビット使っていますが、10ビットまで用意してからの変換にすれば楽だったなーとか思う。

AptanaStudioが起動しない

AptanaStudio.exe(lnkではない)を管理者として実行する(cleanオプションも付けた)

マイグレーションファイルを作る

rails generate migration AddOtherToUsers

名前は何やっているかわかるようなネーミングにした

マイグレーションファイルを編集する

class AddOtherToUsers < ActiveRecord::Migration
  def change
    add_column :users, :other, :integer, :after=>:campus
  end
end

テーブルを操作する

rake db:migrate
rake aborted!
ActiveRecord::StatementInvalid: Could not find table 'members'

見覚えのあるようおなエラー

rake db:migrate RAILS_ENV=production

流れに沿って作る。

new
#user_controller.rb
  def new
    @user = User.new
    @basyo = [false, false, false, false, false] #場所の初期値
  end
#new.html.erb
<%- if context=="edit" -%>
<%- if @user.campus !=1 %>
	A地区<%= check_box_tag 'basyo[0]', true, @basyo[0], {} %>
<%- end %>
<%- if @user.campus !=2 %>
	B地区<%= check_box_tag 'basyo[1]', true, @basyo[1], {} %>
<%- end %>
<%- if @user.campus !=4 %>
	C地区<%= check_box_tag 'basyo[2]', true, @basyo[2], {} %>
<%- end %>
<%- if @user.campus !=16 %>
	D地区<%= check_box_tag 'basyo[4]', true, @basyo[4], {} %>
<%- end %>
<%- end %>
create
  def create
    @user = User.new(params[:user])    
    @user.other = basyo_to_bit(params[:basyo])
(省略)
  # ビットを数値に変換する
  def basyo_to_bit(parameters)
    unless parameters.nil?
      rtn=0
      parameters.each{|key, value|
      rtn += 2**key.to_i if value == "true"
      }
    else
      rtn = nil
    end
    return rtn
  end
show
<%= other_edit(usr.other) %>
#users_helper.rb
  def other_edit(m)
    unless m.nil?
      rt =""
      $campuses.each{|c|
        #ビット演算
        if c[1] & m == c[1]
          rt += "/" unless rt.blank?
          rt += c[0] 
        end
        }
      return rt
    end
  end
edit

既存の未入力対策と初期値の設定、なんだかかっこわるい。

  def edit
    @user = User.find(params[:id])
    #logger.debug(@user.other)
    if @user.other.nil?
      @basyo = [false, false, false, false, false]
    else
      tmp = @user.other.to_s(2).split("")
      if tmp.size < 5
        (5-tmp.size).times{ tmp.unshift("0") }
      end
      @basyo = []
      tmp.each{|n|
        rt = n == "1" ? true : false
        @basyo << rt
        }
    end  
  end
 ||<
***update
>||
  def update
    @user = User.find(params[:id])
    @user.other = basyo_to_bit(params[:basyo])
(省略)

2018-04-02

[]windows8.1に.NET3.5が入らん

Windows 8.1 に .NET Framework 3.5 をインストールできない問題が発生していて、0x800f0906というエラーが出る。

.NET Framework 3.5 インストール時のエラー: 0x800F0906、0x800F081F、0x800F0907というそれっぽいサイトが存在するけど解決しない。

Windows 8、Windows 8.1、Windows Server 2012、および Windows Server 2012 R2 上の .NET Framework 3.5 の更新プログラムを参考にすると改善した。

2018-03-31

[]Windows8のsysprepのエラーで悩むが解決しない

クローンをつくるべくsysprepを実行してみた

システム準備ツール 3.14
コンピューターの sysprep を実行中に致命的なエラーが発生しました。

C:\Windows\System32\Sysprep\Panther\setuperr.log

2018-03-29 10:25:48, Error SYSPRP Package Microsoft.VCLibs.110.00_11.0.51106.1_x86__8wekyb3d8bbwe was installed for a user, but not provisioned for all users. This package will not function properly in the sysprep image.

||<

これが邪魔しているらしい。

組み込みの Windows イメージを含む Microsoft Store アプリを削除または更新した後で sysprep が失敗する

Windows 8/8.1 で Sysprep が次のエラーで失敗する:マシンの Sysprep 試行中に致命的なエラーが発生しました (2081549)

Windows 8以降のSysprep嵌りポイント

いろいろと試しているとWindowsストアが起動しなくなった。

Windows 8.1 Tips 集 - Windows ストアでエラーが出る場合の対処法 の3番目で復活した。

なんだか試すのも疲れてきた。クローン相手は1台なので地道に1からセットアップすることにした。

2018-03-23

[]バッチファイルでイロイロとやってみる

ファイルサーバをマウントする

Xドライブにserver1を指定するバッチ

if exist x:\. net use x: /delete /yes

if not exist x:\. net use x: \\server1

サービスの停止

sc config adobeARMService start=disabled

「最近使ったファイル」の削除

reg delete HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU /va /f

Explorerアドレスバーの履歴の削除

REG delete HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\TypedPaths /va /f

Adobe Reader Updateの無効化

reg Add "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Adobe\Adobe ARM\Legacy\Reader\{AC76BA86-7AD7-1041-7B44-AC0F074E4100}" /v "Mode" /t REG_DWORD /d 0 /f

タスクマネージャーのスタートアップから削除

REM Adobe Updater Startup Utility

reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "AdobeAAMUpdateer-1.0"

if %ErrorLevel%==1 (

echo "Adobe Updater Startup Utilityはなかった"

) else (

reg delete "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "AdobeAAMUpdateer-1.0" /f

)

REM iTunesHelper

reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "iTunesHelper"

if %ErrorLevel%==1 (

echo "iTunesHelperはなかった"

) else (

reg delete "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "iTunesHelper" /f

)

REM Java Update Scheduler

reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run" /v "SunJavaUpdateSched"

if %ErrorLevel%==1 (

echo "Java Update Schedulerはなかった"

) else (

reg delete "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run" /v "SunJavaUpdateSched" /f

)

Windows8.1のIEインターネットオプションで削除するあれ

REM Internet Explorer(7以降)のキャッシュ削除

RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 255

REM ダウンロード履歴の消去(OSによっては512になるかもしれん)

RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 16384

最近使ったフォルダ、ファイルのクイックアクセス表示の消去

DEL /F /Q %APPDATA%\Microsoft\Windows\Recent\*

DEL /F /Q %APPDATA%\Microsoft\Windows\Recent\AutomaticDestinations\*

DEL /F /Q %APPDATA%\Microsoft\Windows\Recent\CustomDestinations\*

ファイルを削除する

関数化してる。ラベルに引数でパスを渡して、存在したら削除、不在ならメッセージ

REM SendToのSkypeを削除

call :DelFile %AppData%\Microsoft\Windows\SendTo\Skype.lnk

 

REM デスクトップGoogle Web Designerを削除

call :DelFile "C:\Users\Public\Desktop\Google Web Designer.lnk"

 

REM 本文ここまで

exit /b

 

REM 引数のファイルを削除する

REM 使い方 call :DelFile Path

:DelFile

if exist %1 (

del %1

) else (

echo %1" ありませんでした"

)

exit /b

 

指定フォルダの中のファイルとフォルダを削除する

win8さんのユーザーディレクトリを綺麗さっぱりにする

call :DelDirs C:\Users\win8\Documents

call :DelDirs C:\Users\win8\Downloads

call :DelDirs C:\Users\win8\Music

call :DelDirs C:\Users\win8\Videos

 

REM 本文ここまで

exit /b

 

REM 引数ディレクトリの中のファイルとフォルダを削除する

REM 使い方 call :DelFiles Path

:DelDirs

pushd %1%

del /q *.*

for /D %%f in ( * ) do (

rmdir /s /q "%%f"

)

exit /b

※たぶん間違っている。最悪は起動しなくなる

2018-02-26

[]バッチファイルで選択、よろしいですか?を出してみた

バッチファイルを作った

選択肢で数値を表示

数値入力

数値を表示

「よろしいですか(y/n)」

最後のY/Nって不要だと思っていたけど、女子に「ほしいぃー」って言われたので実装した。

3種類のユーザープロファイルをコピーするバッチ

@echo off

:Main
echo ディスク名を選択 キー入力後にEnterで決定
echo [1] Tokyo
echo [2] Nagoya
echo [3] Osaka
echo [e] 終了

set /p input=
if defined input set input=%input:"=%
if /i "%input%" == "1" (goto InputCheck)
if /i "%input%" == "2" (goto InputCheck)
if /i "%input%" == "3" (goto InputCheck)
if /i "%input%" == "E" (goto exit) else goto AnotherInput
goto Main

:InputCheck
echo 入力確認
echo %input%

set /p answer="処理を開始します。よろしいですか?(y/n): %answer%"


if "%answer%"=="y" (
if /i "%input%" == "1" (goto Tokyo)
if /i "%input%" == "2" (goto Nagoya)
if /i "%input%" == "3" (goto Osaka)
) else (
goto  Main
)


:Tokyo
set DiscName=Tokyo
goto Hoge

:Nagoya
set DiscName=Nagoya
goto Hoge

:Osaka
set DiscName=Osaka
goto Hoge

: AnotherInput
echo 入力されたキーがちげえんだよ!
echo.
goto Main


:Hoge
set ThisDate=%date:~0,4%%date:~5,2%%date:~8,2%
set FName=%DiscName%%ThisDate%

set from_folda=C:\Users\Default

set to_folda=\\serv1\Disc-profile$\%Fname%

robocopy %from_folda% %to_folda% /s /e

2018-01-25

[]古いコードを見直し

イマドキを知ってから古いコードを眺めると、なんて読みにくいんでしょうか。。。

自分なりの解釈というか、使い勝手を乱筆

var

varは全部とりあえずconstに置き換えて、上書きがどうしても必要なところだけletにします。

複数のJavascriptファイルで使う変数とかにvarを使いました。

let

※IE10で使えない。ちくしょう

変数として使うことが多いので、ほとんどletかなー


const

※IE10で使えない。ちくしょう

連想配列として使っていても初期値を変更しないなら、constでよいっぽい。

const hoge={a:"aaa", b:"bbb"};
hoge.c="ccc";

文字列の結合

※IE10で使えない。ちくしょう

ちょー便利!いままので「”(ダブルコーテーション)」と「+(プラス)」の羅列よ、サラバじゃ!

大好きなwrap関数の場合

function wrap(tag, text, css){
/*	
	HTMLタグを作る
	tag: htmlタグ
	text:文章
	css:省略OKなスタイルシート
*/
	const rcss = css=== void 0 ? "" : ` class="${css}"`;
	return `<${tag}${rcss}>${text}</${tag}>`;
}

もうちょっと改造して、関数も$に入れちゃう。

function css_conv(css){
// HTMLのclassを作成する
	return css!=="" ? `class='${css}'` : "";
}

function wrap(tag, text, css){
/*	tag: htmlタグ
	text:文章
	css:省略OKなスタイルシート*/
	return `<${tag} ${css_conv(css)}>${text}</${tag}>`;
}

関数引数初期化

すげぇー!イマドキっぽい!!!

function show(name = 'ハル') {
  console.log(name);
}

show();      // ハル
show('はる'); // はる

分割代入

※IE10で使えない。ちくしょう

複数に値を代入したいけど、複数行書いていたことに不満があるときに使う

let [hoge, fuga] = [false, true];

if文の波括弧不要論

1行if文は無くてもOKらしい

if (hoge===false){ aho="あほ";}
if (hoge===false) aho="あほ";

2017-12-31

[]イマドキのJavaScriptの書き方2018を読んだ

イマドキのJavaScriptの書き方2018を読んでみた。

重い腰を上げて書き直したい。

2017-11-17

[][]動的配列

なんでこんなに面倒なのか。

配列の数を決めてから格納するって、どこが動的なんだか

ぶつぶつ

    Dim ArrStr() As String
    
    ReDim ArrStr(3)
    
    ArrStr(0) = "aaa"
    ArrStr(1) = "bbb"
    ArrStr(2) = "ccc"
    
    
    For i = 0 To UBound(ArrStr) - 1
        ArrStr(i) = ArrStr(i + 1)
    Next i