地球環境を考えるフリーソフト

1. icf :

世間では地球温暖化問題(パリ協定)がニュースになっている。日本では産業発展という見地から、なかなか進んでいないようだ。
お金は、人の役に立って手に入れることも、人から盗んで手に入れることもできる。後者のほうが楽なのかもしれない。そしてお金の盗み方しか教えることができない人が偉くなれば、お金の盗み方しか教えられないのだ。人の役に立ってお金を手に入れる方法を考える人が増えなければ、いけないのかもと考えている。
人の役にたってお金が手に入るなら、盗みたいと思う人は減るだろう。
地球環境に悪いことがお金になり、地球環境に良いことが損になると決めつけてしまっていないだろうか。まぁ、そういうことは多いだろう。
しかし地球環境に良いことをしつつ、お金になる、そうなるアイディアを考える努力は、しないといけないのかなと考えるのだ。
前置きが長くなったけどパソコンのOSやソフトはどんどん肥大化をして重くなり高速なCPUや大容量なHDDが必要になってきている。
アプリケーションのバイナリのサイズが半分になってCPUの性能が半分で良くなれば、パソコンの対応年数が10年くらいに伸びるかもしれない。
もし、そうなれば、仕事がハードウェアの生産からソフトウェアの生産にかわり、地球環境にやさしいことをしつつ、お金になっているということじゃないか。
DLLHELLの問題を我慢すればCPUの性能の半分は難しいかもしれないが、アプリケーションのバイナリサイズの半分は可能かもしれない。
たとえばDLLHELL1という規格をでっちあげて、それに合わせて、みんながアプリを作ればいい。アプリはVisual Studio 2015のMFCで作ることとか。MFCは、もしかすると斜陽なのかもしれないが性能の話を考えると、やはり有利かなと。
これが現実的に可能なのかは検証していない。これから暇があれば、考えてみるのかも。考えないかもしれない。
もし、よかったら雑談してみてくださいな。

2. カプラテ :

ううんん難しいっ! いきなり何言ってんだと思ったがそういう哲学っぽいのも大好きだ。
そういやエコとか最近聞かなくなったな。環境破壊とかがテーマの作品も今は見ないし。
もう手遅れで気付かせないように操作されてるのかと思うぐらいに。
日本っていろいろその場だけ都合のいい情報に教え込まれて育っているとも思えてくる。(中二病w)
風の谷のナウシカとか平成狸合戦ぽんぽことか、これほど直球なテーマは今は流行らないだろな。

さて環境破壊をアプリケーション開発に話を置き換える。ううんんんん???????????
ソフトやハード開発の業界人じゃない、言わばただのゲーマーだから理解が難しくてゴメン。
前置き辺りは解った。
違法ダウンロードや複製コピーなどで金儲けせずに、人の役に立つソフトでも作って売る方が生産的だって事だな。
後半部分が難しいのだが、
ハードはPCに求められる事が多様になっている為、それに比例して肥大化するもんじゃないか?
電卓とか小さな単機能に特化したコンピュータは別として。
初期の電卓はそれは巨大な装置だったらしいが、今では手の平サイズになった。
いつか今我々のPCも手の平サイズになるかもしれないな。
まぁとにかく今ここでは、それをフル稼働させる重たいソフトが問題ってことだよな?
ソフトってexeの実行ファイルの他にもdllとかあって、それがかなり大事なものってのも解る。
ちょっとアホみたいな事聞くが、dllが無いソフトも多く見るのだが、それって開発言語の違う理由?

3. icf :

> さて環境破壊をアプリケーション開発に話を置き換える。

ハードウェアを生産するには鉱物資源の採掘からはじまるけど石油を使って採掘機を動かして石油を使って運んで火力発電などの電気を使って精錬して組み立てる。そして石油を使って一般消費者へと運ばれる。さらに、古くなって使わなくなって捨てれば石油を使ってレアメタルを回収する。石油を使うことでニュースになっている地球温暖化で問題になっているCO2を排出しているし、貴重な石油資源を消費している。
アプリがスリム化すれば必要なハードウェアが減り、環境破壊問題にとって、いい話となるだろう。
アプリをスリム化するには、スリム化したアプリケーション開発が必要になる。

> ハードはPCに求められる事が多様になっている為、それに比例して肥大化するもんじゃないか?

そういうものが必要な人たちは、今後も、肥大化してもらえば、いい。
しかしブラウザとメールくらいで足りてしまう人も、いるはずだ。
またヘビーなユーザーさんでも、古い性能の低いマシンで動くなら、捨てずに使えることはあるだろう。

> まぁとにかく今ここでは、それをフル稼働させる重たいソフトが問題ってことだよな?

重たいソフトだけでなく、すべてのソフトが軽量化にむけて、開発する必要があります。

DLLを使えば重たいソフトがフル稼働したままスリム化できる、というメリットがあるかわりに
DLL HELLのデメリットがあるということです。
DLL HELLは人件費をかければ、改善されます。ただ完全に問題をなくすことは難しいので
DLL HELLのリスクを承知で古い性能の低いマシンを使う。新しいマシンを購入しなくてもいい結果、お財布にも優しい。

> ちょっとアホみたいな事聞くが、dllが無いソフトも多く見るのだが、それって開発言語の違う理由?

C/C++だとDLLを使うように開発すればいい。確かにC#やJavaだとDLLを作るのは難しいかもしれない。
しかしC#やJavaは性能を出しにくいから事実上、使えるのはC/C++のみかもしれない。
新しい言語のRustはC/C++に匹敵する性能と、C/C++が弱い安全性についてもいいらしいからRustはいけるのかな?

4. icf :

ちょっと他で半導体製品の自給率を上げるべきだとも、言っていて、なんだお前、矛盾しているだろうと
言われそうなので、言います。地球環境よりも自給率優先です。
ここでは詳しい説明はしませんが、自給率をあげなければ、将来高くつく可能性があるということ。

パソコンのハードウェアで国産なのはSSDくらい?
大容量化したHDDを、アプリスリム化でSSDに収めれば問題がない、、、かも。

5. Gonbe :

>>2
dllとexeの違いについてググれば出て来ますが、適当なものを引用してlibも含め簡単に説明しておきますね。

exeはプログラムそのものですが、dllはアプリケーションがよく使う機能を集めたファイル(ライブラリ)です。
同じ機能がアプリ毎に重複してあっても無駄なので、よく使う機能は共有が出来るように独立させる訳ですが、
dllはexeを補佐する役割だけであって単体では動作しません。
このようなライブラリをプログラムに組み込んだ場合、dllが無いソフトということになります。

dll(Dynamic Link Library)ファイルは「動的リンク」です。
どういう事かと言えば、「dllファイル」は、ライブラリを実行ファイル(eveファイル)とは別に作成して、
実行時に必要なものを外部から動的に呼び出すものです。

メモリ上に読み込んだ1つのdllを複数のアプリケーションで共有することが出来るため、
メモリ使用量を節約することが出来るという利点があります。
また、exeに埋め込まないため、実行ファイルの容量を小さくすることが出来ます。
更に、ライブラリをアップデートする場合には、dllファイルをアップデートするだけでよいのです。
欠点は、dllファイルが無ければアプリケーション単体では動作することが出来ないことです。
そのため、dllのリンクを正しく設定しておく必要があります。

そして、lib(Static Link Library)ファイルは、「静的リンク」です。
dllに対して、「libファイル」は、ライブラリをプログラムに組み込み、実行ファイルに埋め込まれたものです。

ライブラリの命令をexeファイルの中に含めているため、exeファイル単体で動作させることが出来ます。
また、exeに埋め込まれていることで、ライブラリ呼び出し時間が短くて済み、高速処理が可能となります。

ただし、exeファイルに埋め込むためファイル容量が大きくなってしまうという欠点があります。
ライブラリをバージョンアップする時、exeファイルも一緒に更新しないといけなくなり面倒です。
更に、アプリケーション(exe)毎にライブラリのコードをメモリに読み込む必要があるため、
他のアプリケーションでも使う同じ処理があっても別々にメモリに読み込むことになり、
メモリ使用量が大きくなるといった欠点があります。

6. icf :

>>5
Gonbeさん、ご解説いただきありがとうございます。

1か所、正しいけど、わかりにくくて、勘違いする人も、いるかもしれないと思ったので、ちょっぴり補足。

> ライブラリをバージョンアップする時、exeファイルも一緒に更新しないといけなくなり面倒です。

多分、OpenSSLとかに脆弱性があってOpenSSLのライブラリをバージョンアップする必要が出てきたとき
DLLではOpenSSLをバージョンアップするだけで簡単だけど、exeに埋め込みしていると、OpenSSLを使っている
すべてのアプリのexeをバージョンアップしないといけなくて面倒です。ということなんだと思います。

7. カプラテ :

できれば賛同したいが、もうエンドユーザーのエコ意識次第だと思ってくる。
ソフトでもなるべく軽量,高速,安定,使いやすさを意識して上を目指して作るのが当然と思うし。
ハードもPC/AT互換の縛りはあるが、省エネ,小型化,高性能を目指してさまざまな用途に合わせたラインナップも用意されてると思う。
ブラウザやメールだけならスマホやタブレットでたぶん十分省エネで、他人にPC購入は薦めない。
メモリやCPUなどを多く使うソフト→ハードに負荷がかかって寿命が短くなる→再生産やリサイクルで環境破壊
こう結びつけなくてもいいと思うし、飛躍しすぎな気がするぞ。
どんな事でも言い当てはまるし、それなら最初から石器時代の事をしていれば済む。
そんな事は今の現代人には無理って決まり文句の様にあるのが問題だが、別に決まってはいないとは思う。
労力=エネルギーと考えるなら便利なことはエコで、別な事に余ったエネルギーを使えるw
余ったエネルギーで改善方法を研究などすればいい。
結局のところ人間は欲が強すぎるから他も巻き込み破滅に向かうが、原子が宇宙空間に飛び出さないならいつか再生すると信じてる。
っとPCとは話がズレた事になって恥ずかしい。
プログラミング初心者で、ただ動けばいいだけの下手なコードを打ってれば効率悪いってのもあるが、
こんな人に愚痴を言いたいって意味もあるんかな?
また、ライブラリももっと効率良いものにしたいって意味もあるんだろうけど。
専門知識がないのでそこは自分ついていけないな。
DLLの説明にGonbeさんとicfさんありがとうございます。
余計なライブラリも読み込みたくなかったら、最初から必要なものだけを組み込んだソフトを開発すればいいんじゃないか
と思ったんですが、それでは効率も悪すぎて逆にメモリも多く食うようですね。

8. icf :

>>7
> ソフトでもなるべく軽量,高速,安定,使いやすさを意識して上を目指して作るのが当然と思うし。

通常のレベルを、はずれて、軽量、高速化を目指し、その対価としてハードウェアの購入コストをしっかり下げる。
ということなのですよ。

> ブラウザやメールだけならスマホやタブレットでたぶん十分省エネで、他人にPC購入は薦めない。

このDLLHELL企画は、PC購入を薦める話ではなくて、むしろその逆。
昔のPCを使えるようにしてPCを購入しなくて済むようにしたり、今あるPCを10年とか、利用できるようにすることでPC購入を控えるのが目的。

> メモリやCPUなどを多く使うソフト→ハードに負荷がかかって寿命が短くなる→再生産やリサイクルで環境破壊
> こう結びつけなくてもいいと思うし、飛躍しすぎな気がするぞ。

ハードに負荷がかかって寿命が短くなることをいっているのではなくて、もっと簡単にいうと低スペックなパソコンで軽快に
インターネットやメールなど日常アプリを使えるようにしたい。
重たいアプリを起動することが、少なければ、不便さも少なく安いパソコンで済む。
今、使っているパソコンを壊れるまで使おう。ということですよ。

> プログラミング初心者で、ただ動けばいいだけの下手なコードを打ってれば効率悪いってのもあるが、
> こんな人に愚痴を言いたいって意味もあるんかな?

全然、そんな意味ない。
DLLHELL企画は、それほど奇想天外なアイディアではないが、どんな風にプログラミングしてやれば
いいのかってのを、教えてあげるくらいは、必要だから、それができなかと思っただけです。

DLLHELL企画は、先進国のわりにパソコンのハードウェアを生産していない日本に向いているのです。
成功する確率は低いかもしれないが、しなければ、いけないことが、ライブラリは、これを使いましょうくらいの仕様をでっちあげるだけなので。
そのうち、DLLHELL企画成功による経済的メリットを算出して、メリットを享受するべく、考えはじめる人が現れることも、あるかなぁとか。

> 余計なライブラリも読み込みたくなかったら、最初から必要なものだけを組み込んだソフトを開発すればいいんじゃないか

メインのパソコンでは、いろいろなアプリが動かないと不便だから、最初から決められたものしかないパソコンなんて、あまり売れそうにない。
普通のパソコンで良くて、日常よく使うアプリだけ、ライブラリを共有して高速化しようということ。
そのうち、重たいアプリもDLLHELL企画Ver1対応の有料アプリとか作られるようになって、お金を払えば、快適になる。
ハードにお金がかかっていないぶん、ソフトにお金が回せるようなるのではと、考えているのです。

9. カプラテ :

>通常のレベルを、はずれて、軽量、高速化を目指し、その対価としてハードウェアの購入コストをしっかり下げる。
ということなのですよ。
なんてこった! 画期的なプロジェクトですな!
やっと意味が伝わってきた気がする。
もうソフトの基本構造になる部分に着手する感じですね。
DLLHELLって意味が今まで理解出来てなかったのが問題なんだけど。
古いPCでも互換性がとれて動作する様に、かつ改良して共有する計画ですか。
古いPCでも動くように考えて作るとなると、最新PCを使ってる者にとっては余計なロードが増えるだけのような気もしますが
構想としては出来そうなものなんですか?
いや、その為に各ソフトでx86とx64で分かれて置かれているのかなぁと思ったり。
どこかのソフト製作者のブログで、「この部分はライブラリを持ってきて簡単に実装できた」
って感じのを見たりするが、現在ではもうライブラリの共有は実現していると思っていた。
まぁそのライブラリ自体が欠陥が多いって事なんですね?
それをみんなで共有して作り直そうとするって事ですか。
もう何も解らない自分が口を出すと前に進みませんねw しばらく黙ってます。

10. icf :

> DLLHELLって意味が今まで理解出来てなかったのが問題なんだけど。

そうですね。意味を説明してなかったかも。DLLHELLはDLL地獄のことでWikiにも解説があります。
昔のコンピュータは性能が低かったのでDLLライブラリを共有するのが普通だったのです。
しかし不具合が発生しやすく『DLL地獄』と呼ばれるようになった。そしてDLL地獄の問題を回避するようにWindowsは進化していったのだが肥大化してしまった。
昔は、プログラムの保守・可読性の向上や、セキュリティ問題等に起因するやむをえない仕様変更等をすることがありDLL地獄を生みましたが、現在では、安定期に入り仕様変更等が減りDLL地獄の問題が小さくなっているのではないか?と考えている。
あるいはDLL地獄の問題をはじめから考えれば問題を最小化できると、思っている。
もう一度、DLL地獄に突入をして、「通常のレベルを、はずれて、軽量、高速化」を達成するのです。

> 古いPCでも互換性がとれて動作する様に、かつ改良して共有する計画ですか。

互換性をとる仕事は、相変わらずOSの仕事で、みんなで同じバージョンのライブラリを使うことです。

> 古いPCでも動くように考えて作るとなると、最新PCを使ってる者にとっては余計なロードが増えるだけのような気もしますが
構想としては出来そうなものなんですか?

古いPCといってもWindows10が動作する要件ぐらいまでなので、余計なロードは、あまりないように考えていますが
万が一あっても、新しいPC用のバイナリと古いPC用のバイナリの2種をつくればいいだけ。
でも、ほとんど、その必要はないとおもうけど。

> って感じのを見たりするが、現在ではもうライブラリの共有は実現していると思っていた。

Gonbeさんの解説にあるようにらいぶらりにはダイナミックなDLLとスタティックなLibがありますがDLLで共有するということになります。

> それをみんなで共有して作り直そうとするって事ですか。

そんな感じです。具体的にはVisual Studio 2015のVisual C++ 再頒布可能パッケージを使いましょうということです。
Visual Studio 2015は、ほとんどの機能を無料で利用できます。
僕なんかはVisual Studio 2013を6万円くらいで買ったのでVisual Studio 2015が無料化されたときは泣きました。
無料なのでVisual Studio 2015に、全員で、合わせることは、できるようになったと思います。
DLLHELL企画はMicrosoftに依存する部分があり、振り回される可能性はあるので、その場合の対策は準備する必要があるのかも。

> もう何も解らない自分が口を出すと前に進みませんねw しばらく黙ってます。

いえいえ、プログラマしかわからないことを、言ってますので、他の人も、わからない人はいたと思います。
何か、あれば、どんどん、言ってください。
逆にプログラマならDLLHELLの言葉1つで、どういうものか、すぐわかる話でもありますが。

11. icf :

>>10 ちょっと訂正

> 古いPCといってもWindows10が動作する要件ぐらいまで

Windows7にします。
ソフトウェア開発からみた境界線はXP以前かVista以降かが、大きな境界線だと思う。

12. カプラテ :

おおぉすごい勉強になる…
ではまぁプログラミングがわからないからこその立場で発言します。
たまに「Visual Basic 6.0(SP5) ランタイム 基本セット」を事前にインストールしておいてください。
とかいうソフトと出くわすが、一般ユーザーの私としては懸念する。
どれが最新なのか分かり辛いし、結局全部インストールしといたり管理も面倒。
「.NET Framework」がインストールされていないと動作しませんってのも同じく。
開発側にとっては楽できるのかもしれないが、ソフト挙動も不安定でデザインもいまいちで動けばいいってものが多い感想。
「Visual Studio 2015のVisual C++ 再頒布可能パッケージ」って一度インストールすると、、、
というよりWindowsアップデートで自動で追加&更新されましたっけ?
全自動で更新されていくのならいいが手動だと嫌だなぁ。

趣味でソフト作ってるレベルじゃないなと思い、
本当に失礼ながらプロフィールを親サイトから覗かせてもらいました。
ハードウェアエンジニア経験あり世界最速記録も叩き出し、現在主にICカードを扱うソフトウェア会社代表取締役社長様でしたか。
ソフトだけでなくハード込みで考えるのも納得です。
別スレでのLinuxも使う意図もその環境を想像したら十分理解できました。
すごい人が集まってるフォーラムですね… 恐縮です。

13. icf :

> 「Visual Basic 6.0(SP5) ランタイム 基本セット」を事前にインストールしておいてください。
> 「.NET Framework」がインストールされていないと動作しません

インストーラで自動的に「Visual Studio 2015のVisual C++ 再頒布可能パッケージ」をインストールさせるようにすればいい。

> というよりWindowsアップデートで自動で追加&更新されましたっけ?

セキュリティアップデートみたいなものは自動。
以前はSP1とかSP2だったけど、最近はUpdateになって、よくわからなくなっているが
多分、全自動という理解でいいものかと。