Macでゴミ箱が空にできない

表題の通りMacのゴミ箱が空にできない現象に悩まされました

一応強引ではありますが解決したのでまとめておきます

 ------------------------------------------------------------------------

1.発生した状況

外部ストレージ(USBメモリ)のデータをゴミ箱に入れる

Dockのゴミ箱を副ボタンで”ゴミ箱を空にする"を選択(以下の画像はfinder画面からやった時の画像)

f:id:poolbooyer:20170218213643p:plain

メッセージ"項目"〇〇"が使用中のため操作が完了できません"が表示

f:id:poolbooyer:20170218213730p:plain

関連していそうなアプリケーションを閉じる

再試行しても同様のメッセージが表示される

端末を再起動する

再試行するも同様のメッセージが表示され削除できない

 

この時、外部ストレージを取り外すとゴミ箱は空になり、再び取り付けるとゴミ箱内にデータがある表示になっている状態でした

 

やったこと
  • 端末の再起動
  • 端末をセーブモードで起動(起動時にshift)
  • モードの確認(rwx)
  • ロックの有無の確認
  • ファイル名の変更(文字コード等の影響の可能性を考えて)
  • sudo rm などターミナルからの操作

 

最終的に解決させた方法

やったことは奥の手というかほとんど反則技です

 

削除できないデータが入っていたUSBメモリwindows端末に接続し、 .trashesという隠しディレクトリを削除しました

これを行うことで改めて接続した時にゴミ箱の中が空の表示になり、全て削除されたことが確認できました

 

予想される原因
  • MacのOSは外部ストレージなどを接続すると隠しファイルの" .trashes"を作成するようになっている
  • この隠しディレクトリはファイルを削除するときの誤削除を防ぐためのフォルダとして使われる
  • 今回はなんらかの要因(ほんとはここが需要)でこのファイルを書き換えることができなくなった可能性がある

 

-------------------------------------------------------------

以上のようになっていました

他にも色々とやり方はあるみたいです

(データを本体などのストレージに一時的に保存してパーテーション作り直す、ファイル名の書き換え・上書きになどを行う  etc...)

 

私はwindowsの端末もあったためその端末からの削除のみで対応できましたがそうじゃなければパーテーションの振り直しなどをするしかなかったかと、、、、

 

ストレージの管理は丁寧にしないとダメですね

バックアップもマメにしてると困った時に復活できるのでそれも大切だなと思いました

探索アルゴリズム(ハッシュ)

連続しての投稿です

 

今日は探索アルゴリズムの一つのハッシュ法についてです

 

ハッシュ法

    基本動作

      データを格納、探索するときに順に格納するのではなく一定の条件の下で格納、探索するアルゴリズム

      このとき、条件は複数に当てはまりにくいものにする方がいい

 

    具体的な動作

      入力は数値、ハッシュ法を行う時の条件をある数で割ったあまりを用いるとする

      この時、あまりを求める条件にする数値は素数が適している(割り切れる数が少ない、あまりが多く確保できるなどの利点があるから)

 

      この時のデータ領域data[13]に数値を格納するアルゴリズムを考える

      この時13で割ったあまりをデータ格納に用いる

 

      入力   18の時   18%13=5  だからdata[5]に18が格納される

      入力   11の時   11%13=11  だからdata[11]に11が格納される

 

     また、あまりが同じ時にはオープンアドレス法を用いて格納場所を変更するなどの方法がある

 

      入力   5の時   5%13=5   この時data[5]にはすでに18が格納されているので次の領域data[6]に格納する

 

      探索についても同様の方法で行われる

      data={13,14,2,16,4,18,5,33,21,35,10,11,37}

      を探索する

 

      dataから14を探索  14%13=1 data[1]を確認すると14が格納されている

                                                       よって探索終了

 

      dataから5を探索   5%13=5   data[5]を確認すると18が格納されている

                                                     次の領域data[6]を確認すると5が格納されている

                                                     よって探索終了

 

    実際のソース

      ハッシュの計算を行うソースの例(C言語)

//ハッシュ関数

//main関数から入力され値 inと割ったあまりを格納する変数 iを受け取る

int hash(int in,int i){

  //入力を13で割った余りを求める
  i=in%13;

  //あまりの値を返す
  return i;
}

 

      格納する場所を変更するソースの例(C言語)

//オープンアドレス関数

//main関数から格納する領域data[13],入力された値 inと入力のあまり iを受け取る

void openaddress(int data[13],int in,int i){

  //iの次の値を求める

  i++;

  //次の領域が空欄("0")か確認する
  while(data[i]!=0){

    //空じゃない時は次のデータを確認する
    i++;
  }

  //空欄("0")の時に値を格納
  data[i]=in;
}

 

        自分が作ったソースコードはこんな感じです

 

    このアルゴリズムの長所と短所

      長所

         様々な動作に活用できる

         短時間で探索ができる

      短所

        データが少ない場合は計算を行うことで処理に要する時間が長くなる

        一致ではなく近隣の値を探索することはできない

 

 

ということで今日は探索アルゴリズムをまとめてみました

ソートアルゴリズム(バブルソート)

今回はソートアルゴリズムについてちょっとまとめて書こうかなと

 

課題に使うので調べていたのですが、自分で理解するのになんか分かりやすく代表的なのをまとめておこうと思ったのでこの記事を書きます

 

そもそもアルゴリズムとは

アルゴリズム....ある問題を解決するための解法

 

コンピュータ関連でいうとある処理を行うときの適切な処理の仕方

データが大きいとか条件によって条件にあったアルゴリズムを用いることで高速な処理にできる

 

今回ピックアップするのはソートアルゴリズムの一つのバブルソートです

 

  バブルソート

        基本の動作

        バブルソートは隣にあるデータと比較、入れ替えをするソートのアルゴリズム

       繰り返し行うことでソートが完了する

       具体的な動き

        例として   24 10 14 71 1 96 67 30 90 31をソートしてみます

    

         1回目

         1  24  10  14  71  30  96  67  31  90

         2回目

         1  10  24  14  30  71  31  96  67  90

         3回目

         1  10  14  24  30  31  71  67  96  90

         4回目

          1  10  14  24  30  31  67  71  90  96

 

   例からわかるように小さい数字がどんどん下に移っていっているのが分かります

   この動きがバブルソートの動作です

 

       実際のソース

       Cで作成したソース例を載せます

//main関数からソートするデータ配列dataを受け取る

int sort(int data[n]){
  //ソートを行う変数check
  //値を一時的に格納する変数dummy
  //比較が終了したデータの個数を格納する変数fin
  int check=n-1,dummy=0,fin=0;
    while(check!=0){
    //比較が終了したデータまでの間比較
    while(check>fin){
      //data[check]>=data[check-1]の時交換しない
      if(data[check]>=data[check-1]){
        check--;
      //data[check]<data[check-1]の時交換する
      }else{
        //元のデータをdummyに格納
        dummy=data[check];
        //一つ下のデータを上に格納
        data[check]=data[check-1];
        //上のデータを下に格納
        data[check-1]=dummy;
        check--;
      }
    }
    fin++;
  }
  return *data;
}      

 こんな感じです

 

このアルゴリズムの長所と短所

  長所

   処理が見やすい

   移動が少ない場合の処理が高速

  短所

 データが大きくなると処理にかかる時間が長くなる

 最悪処理時間はすべてのデータの入れ替えを行うときの時間になる

 

 

長ったらしくなってしまいました

とりあえず自分が知りたかったことはこんな感じなので今日はこれで 

今後時間を見つけて他のアルゴリズムも調べてまとめてみます

 

-------------------------------参考-----------------------

バブルソート - Wikipedia

バブルソート