はてなキーワード: ホームページビルダーとは
卒業研究も就職予備校も両方やると言う本当の地獄を教えてあげますよ
俺の母校なんだが。
2年制の専門学校なんだけどね。
卒業制作ってカリキュラムがあるんですよ。これは必修になってて、完成しないと卒業出来ない。
そして、はこれ「就職の内々定をもらった会社から、オーダーを貰って作る」というシステムになってる。
ハマると効率いい。俺はハマった方。
卒業制作で作った生産管理システムモドキ。実態は殆ど先生に面倒見て貰って、Accessのテンプレをちょちょっと弄ってお茶を濁したものだった。
そして就職して18年、秘伝のタレのごとく継ぎ足し継ぎ足し、今でもその面倒を見るだけで仕事になってる。
誰も他に分かる奴がいないから好き勝手できて楽しいぞ。クラウド移行を全部趣味全開でやったが誰にも文句を言われない。
でもね。あわないとなかなかの地獄よ?
俺の同級生はデザインコース出身。自社のホームページを作れと言われて、ホームページビルダーを渡され、自分で張り切って写真撮って……いるうちに、何かあったんだろうね。その会社の闇をみちゃったのか、就職したくないと言い始めた。
でも許されないんですよね。
この専門学校の就職は、基本的に学校推薦で決まるから、事態はよっぽどのことが無い限り許されない。先生に軟禁されてゴリゴリに説得される。
残業が終わってメールを確認したら、Yahooからジオシティーズ閉鎖のお知らせが来ていた。
もう今は全く更新していないが、私のウェブサイトがジオシティーズにまだ残っている。
思い返せば開設は十年以上前のことだ。
大学進学を機に手に入れたノートパソコンを使い、アキハバラの怪しい露天商から買った古いバージョンのホームページビルダーで、せっせと作り、当時は豆に更新もしていた。
活発だった人たちとは比べものにならないけれど、サイトを通じて知り合った方も数人いて、掲示板でやりとりしたりした。
その掲示板も、今はスパムの海に沈んでしまっている。今思えばログを取っておくべきだったかもしれない。
サイトに残る諸々をどうすべきか考える。
今更、サイトを移転しようという気はないけれど、跡形もなく消えてしまうのもそれはそれで寂しさがある。
ウェブサイトの墓、みたいなサービスを誰か作ってくれないだろうか。
食べログやWeb制作企業のアコギな商売のため、それらに不満を抱えているローカル小規模商店が多いとわかった
そこで(抜けはあるかも知れないが)一部の知識を提供しようと思う。
前提として「すべてこの情報でまるっと上手くか?」といえば「そうてないこともある」ことは留意しておいて欲しい。
流石に今どき!DOCTYPEから手打ちしろというのは酷すぎるので「静的サイトジェネレータ」を使う
わかりやすく言えば「ホームページビルダー」で、デザインテーマに合わせたWebページの雛形を生成してくれるもの
現在では静的サイトジェネレータと言うとGUIではなくCUIからWebページを生成してくれるものを指すことが多い
GUIの場合は「Webサイト作成ソフト」「Webオーサリングツール」と呼ばれることが多い
生成されたWebページが含まれたディレクトリをFTPアプリケーションでプロバイダのホームページスペースへアップロードするだけでWebサイトを立ち上げることが可能
早い話こんなのが簡単に作れる上に、最初からたいていはスマホにも対応してる
ttp://www.codeblocq.com/assets/projects/hexo-theme-magnetic/
ttps://sharvaridesai.github.io/hexo-theme-edinburgh-demo
ttps://themes.gohugo.io/theme/yourfolio/
ttps://themes.gohugo.io/theme/alpha-church/
ttps://themes.gohugo.io/theme/hugo-shopping-product-catalogue-simple/products/
ttps://themes.gohugo.io/theme/hugo-creative-portfolio-theme/portfolio/
ttps://event-jekyll-theme.github.io
ttp://jekyllthemes.org/themes/project-gaia/
ttps://portfolio-central.github.io/jekyll-instagram-portfolio-theme/
ttp://mushishi78.github.io/one-page-wonder-jekyll/
ttps://jekyller.github.io/online-cv/
「久々にその固有名詞見たわ」「古いバージョンなら持ってる」と言われそうなド定番
オープンソースなWebオーサリングツール。無料だけどホームページビルダーやDreamweaverに比べると使いにくい
日本語情報も豊富なRuby製静的サイトジェネレータ。他者へ質問しやすいというメリットもある
Node.js製の静的サイトジェネレータ。もう既にNode.js環境があるならアリかな?
Go製静的サイトジェネレータ。シンプルな機能とWebページ生成までの高速性が売り
「どれが良いか?」と問われると「どれが良いってことは無いんだけど、情報の豊富さならJekyll、Webページの生成の速さならHugo」というのが答え
合わないと思ったら別の使えば良いとは思う
プロバイダのホームページスペースにはFTPアプリケーションによるアップロードを行う
定番の「FileZilla」や「FFFTP」あたりを使っていれば間違いない
プロバイダがサーバサイドスクリプトを許可していない限りコメント機能の実装は難しい
しかし、需要があるところには供給もあり「DISQUS」というコメント機能が使えないWebページにコメント機能を実装させるWebサービスがある
Twitter、Facebook、Google+などのSNSアカウントがあれば書き込むことができる
静的サイトジェネレータ名にDISQUSと加えてググればたいてい情報が出てくる
ちなみにWindowsではWSL環境でUbuntu上にHugoなどを構築すると楽
CLIが苦手な人は従来通りホームページビルダーやDreamweaverを使えば良いと思うが、CLIの利点はGitなどバージョン管理システムで管理しやすく、今後レンタルWebサーバへ移行しても、容易にそのままホームページを移行できるというメリットがある
WordPressなどのCMSには良い部分が多くあると思うし、顧客が追加要望ばかりしてアホすぎるという意見もわかるし、メシの種だからあんまり触れてくれるなというのもわかる
プロ並みの知識がある人は、Adobe社のDreameaver(ドリームウィーバー)CCがお勧めでしょうけども、
きっとそうではないですよね?^^;
とりあえず、ホームページビルダーを試してみましょう。
グラフィックデザインがメインの会社で社内でたったひとりのWebデザイナーなんだけど、今やってるWeb制作の案件がちょうどこんな感じ。
ホームページビルダーで更新できるように、レスポンシブで、記事なんかを色々と書きたいということで静的サイト50ページほどを作成。
明らかにWordpressなり使ったほうがお互いラクだと思うんだけど、それは断固拒否された。ホームページ・ビルダーでできないからだそうだ。
サイトマップ、リンクの導線も全部ド素人のクライアントから完全指定。迷路みたいなサイトで、作っている自分でもどこにどのページがあるのか未だに覚えられない。
そして今9割ほど出来てるんだけど、とにかく修正が多い。修正というより変更。
Tableタグ内で、このセルのみ左揃えにして欲しい。やっぱり右。やっぱりフォント少しだけ小さく。だとか
あっ ここのサイトっぽくしてください。ここのサイトとここのサイト混ぜたような感じで。だとか
普通のWebサイトのセオリー・デザインのセオリーを全て無視したクライアントの意見を尊重しないといけないので、インターネット上に漂うゴミをひたすら捏ねている気分。
デザインの4大原則? もう跡形もない。 分かりやすい導線? 作ってる自分でさえテキストエディタのツリー見てURL入力しないと各ページにたどり着けない。
そもそも悪いのはこんな案件を安易に受けてきた営業さん。CMSナシで記事をどんどんホームページ・ビルダーで更新してかつレスポンシブ?
静的サイトでどうやって? アーカイブとか過去記事とか全部手入力するの? Jekyllとかの静的サイトジェネレーターの使い方でもクライアントに教える? それならWordPressの方がずっとマシだ。
今までクライアントから届いた修正のPDFの量は100をとうに越えている。1つのPDFにつき5ページくらいだから500ページ分?
細かい文言の変更、ウィンドウサイズは人それぞれなのでである程度は仕方ないと伝えているのに改行がおかしいだとか。グラフィックデザインと勘違いしていらっしゃる。
何が悲しいかってこんなことがもう半年続いているということと、くだらない修正をしても何のスキル向上にもならないということ。
ヘイトがすごい溜まっている。
悪質なキュレーションサイトやまとめサイトが話題になっているが、それらのサイトを検索結果で上位に表示するgoogleへの批判が一切ないのはなんで?
まあそう言っていても始まらないので、実際に調べてみよう。
健康医療関連は今回の騒動で消えてしまって比較にできないと思われるので、それ以外のキーワードでやってみる。
https://www.google.co.jp/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=%E7%AF%80%E7%A8%8E
2位のWikipediaより上とか見るに堪えない。
Bingは「節税の達人」節税に関する情報サイトがトップ。ホームページビルダーで作ったみたいな個人サイトっぽいサイトだ。。
調べてみると税理士事務所のサイトでのようで、事務所の宣伝以外は宣伝は全く載っていない。
2位Wikipediaへと続く……
と思いきや何度か検索しなおすと頻繁に検索順位が変わっている模様。
1位にネイ〇ーまとめが来ることもある。Bingの特徴のようだ。
http://b.hatena.ne.jp/search/text?q=%E7%AF%80%E7%A8%8E&sort=popular
源泉徴収票の見方についての記名記事がトップ。会社をやっている人なので源泉徴収票の見方などはなれたものなのだろう。読んでみるとなかなかの力作である。
次、
https://www.google.co.jp/?gws_rd=ssl#q=%E6%B0%B4%E7%B4%A0%E6%B0%B4
意外なことにはてなダイヤリーの水素水宣伝系炎上記事がトップ。ブクマを見ないで記事内容だけ見たら水素水は効果があるという内容になっている。
第二にくそ胡散臭いヘルスケア大学とかいうキュレーションサイトの中身空っぽデマ記事
次にBing
一位はGoogleと同様
二位はWikipediaなのでGoogleよりましかもしれない。
http://b.hatena.ne.jp/search/text?safe=on&sort=popular&q=%E6%B0%B4%E7%B4%A0%E6%B0%B4
Googleはくそまとめとくそキュレーションサイトを検索結果上位に並べて広告で儲けているだけである。
Bingは割といいところもあるがまだまだ。
はてブは神。
今まで、ブログを何個作っては潰してきただろうか。
ゴリゴリ変わっていった意味不明なペンネームを年表にして検索をかけてみると、私が産んでしまった、死のうにも死ねないブログの残骸がネット世界にふわふわ浮かんでいると思う。
つい最近も、5年前くらいに作ったアメブロの記事を見つけて、脳汁をドバドバ垂れ流しながらそれらを消した。
私は、ホームページビルダーを使ってクソみたいなページを作った。
「リンク集」を「ゼルダ集」と書き換えて(これは本当におもしろくないギャグです)友人に「こんなものを作りました」と自慢してたのを思い出して死にたくなる。
キラキラ大学生風だった頃、コメントが付くと嬉しくてついつい色々どうでもいい事を書いていた。
高校の終わりくらいからやっていたので、結局5年くらい続けたと思う。
そして私はアラサーになった。
WP以外もう更新はされておらず、ネットデブリになる前にそっと削除しておこう、とそう思った。
良い。
私の持てる知識を絞り出してなんとか完成しました。
**************************************************************************************
完成したサイトがこちらです。
LapyNetニュース
**************************************************************************************
私は普段webとは関係ない仕事してます。なんとか休日を利用して、
メインのコードはこんな感じ
----------------------------------------------------------------------------------------------------------------------
App::uses('Sanitize', 'Utility'); class RssfeedsController extends AppController { public $helpers = array('Html','Form','Session','Number','Cache'); public $uses = array( 'Rssfeed', 'Tweet', 'Wadai', 'Rank', 'Oracle' ); ************************************************************************************** public function index() { $title_for_layout = "LapyNetニュース"; $content = "Hello World!!"; $this->set(compact('title_for_layout','content')); if(date("G")>0 and date("G") < 7){ $today = date("Y-m-d", strtotime('-1 day')); }else{ $today = date("Y-m-d"); } $params = array( 'conditions' = > array( 'and' = > array( 'Rssfeed.time' = > $today, )), 'order' = > 'tweets desc', 'limit' = > '50' ); $this- >set('posts',$this- >Rssfeed- >find('all',$params)); $paramz = array( 'order' = > 'Rssfeed.id desc', 'limit' = > '10' ); $this->set('posts2',$this->Rssfeed->find('all',$paramz)); $paramz = $this- >Rssfeed- >query('SELECT id,title FROM rssfeeds order by id desc limit 10'); $this->set('posts2', $paramz); $parapara = $this- >Oracle- >query('SELECT id,title FROM oracles order by id desc limit 10'); $this- >set('postx', $parapara); $funking = $this- >Rank- >query('SELECT id,frank FROM ranks where creation=(select max(creation) from ranks)'); $this- >set('funking', $funking); } ************************************************************************************** public function mizuno() { $parapara = array( 'order' => 'Oracle.id desc', 'limit' => '30' ); $recent_posts = $this->Oracle->find('all',$parapara); return $recent_posts; } ************************************************************************************** public function wadai() { if(date("G")>0 and date("G") < 7){ $today = date("Y-m-d", strtotime('-1 day')); }else{ $today = date("Y-m-d"); } $params = array( 'conditions' => array( 'and' => array( 'Rssfeed.time' => $today, 'Rssfeed.kubetu' => 4 )), 'order' => 'tweets desc', 'limit' => '100' ); $this->set('posts',$this->Rssfeed->find('all',$params)); $this->set("title_for_layout","2CHニュース-LapyNetニュース"); $paramz = array( 'order' => 'Rssfeed.id desc', 'limit' => '10' ); $this->set('postyy',$this->Rssfeed->find('all',$paramz)); $parapara = array( 'order' => 'Oracle.id desc', 'limit' => '10' ); $this->set('postyx',$this->Oracle->find('all',$parapara)); $funking = $this->Rank->query('SELECT * FROM ranks where creation=(select max(creation) from ranks)'); $this->set('funking', $funking); } ************************************************************************************** public function hot() { if(date("G")>0 and date("G") < 7){ $today = date("Y-m-d", strtotime('-1 day')); }else{ $today = date("Y-m-d"); } $params = array( 'conditions' => array( 'and' => array( 'Rssfeed.time' => $today, 'Rssfeed.kubetu' => 3 )), 'order' => 'tweets desc', 'limit' => '20' ); $title_for_layout = "LapyNetニュース"; $this->set("title_for_layout","ニュース-LapyNetニュース"); $this->set('posts',$this->Rssfeed->find('all',$params)); $parapara = array( 'order' => 'Oracle.id desc', 'limit' => '10' ); $this->set('postxx',$this->Oracle->find('all',$parapara)); $paramz = array( 'order' => 'Rssfeed.id desc', 'limit' => '10' ); $this->set('postsxxx',$this->Rssfeed->find('all',$paramz)); $funking = $this->Rank->query('SELECT * FROM ranks where creation=(select max(creation) from ranks)'); $this->set('funking', $funking); } ************************************************************************************** public function newnew() { if(date("G")>0 and date("G") < 7){ $today = date("Y-m-d", strtotime('-1 day')); }else{ $today = date("Y-m-d"); } $params = array( 'conditions' => array( 'and' => array( 'Rssfeed.time' => $today, 'Rssfeed.kubetu' => 2 )), 'order' => 'tweets desc', 'limit' => '20' ); $this->set("title_for_layout","エンタメニュース-LapyNetニュース"); $this->set('posts',$this->Rssfeed->find('all',$params)); $paramz = array( 'order' => 'Rssfeed.id desc', 'limit' => '10' ); $this->set('postszz',$this->Rssfeed->find('all',$paramz)); $paramz = $this->Oracle->query('SELECT id,title FROM rssfeeds order by id desc limit 10'); $this->set('postszz', $paramz); $parapara = $this->Oracle->query('SELECT id,title FROM oracles order by id desc limit 10'); $this->set('postzy', $parapara); $funking = $this->Rank->query('SELECT * FROM ranks where creation=(select max(creation) from ranks)'); $this->set('funking', $funking); } ************************************************************************************** public function top() { if(date("G")>0 and date("G") < 7){ $today = date("Y-m-d", strtotime('-1 day')); }else{ $today = date("Y-m-d"); } $params = array( 'conditions' => array( 'and' => array( 'Rssfeed.time' => $today, 'Rssfeed.kubetu' => 1 )), 'order' => 'tweets desc', 'limit' => '20' ); $this->set('posts',$this->Rssfeed->find('all',$params)); $param = array( 'conditions' => array('times > current_timestamp + interval -600 minute and Kubetu = 4'), 'order' => 'tweets desc', 'limit' => '30' ); $this->set('posts2',$this->Rssfeed->find('all',$param)); } ************************************************************************************** public function view($id = null ) { $this->Rssfeed->id = $id; //驥崎ヲ√↑荳譁・i縺励> $user = AuthComponent::user(); $TwimStatus = ClassRegistry::init('Twim.TwimStatus'); $TwimStatus->getDataSource()->setToken(AuthComponent::user()); $statuses = $TwimStatus->tweet(); $rairai = $this->Rssfeed->read(title,$id); $alcol = $this->Rssfeed->read(); $this->set('post', $alcol); $this->set('post2', $user); $this->set('post3', $statuses); $this->set("title_for_layout",$rairai[Rssfeed][title]."-LapyNetニュース"); $paramz = array( 'order' => 'Rssfeed.id desc', 'limit' => '20' ); $this->set('postszz',$this->Rssfeed->find('all',$paramz)); $parapara = array( 'order' => 'Oracle.id desc', 'limit' => '30' ); $this->set('postzy',$this->Oracle->find('all',$parapara)); } ************************************************************************************** public function add() { if($this->request->isPost()){ if($this->Tweet->save($this->data)) { $this->Session->setFlash('seikou'); $this->redirect(array('controller'=>'rssfeeds','action'=>'view',$contents11)); }else{ $this->Session->setFlash('sipai'); $this->redirect(array('controller'=>'rssfeeds','action'=>'view',$contents11)); } } } ************************************************************************************** public function delete($id = null) { $this->Rssfeed->id = $id; $this->set('set', $this->Rssfeed->read()); $this->redirect(array('controller'=>'tweets','action'=>'delete',$this->data['tweet']['rssfeed_id'])); } ************************************************************************************** public function oracle() { if($this->request->is('post')) { $user = AuthComponent::user(); $TwimStatus = ClassRegistry::init('Twim.TwimStatus'); $TwimStatus->getDataSource()->setToken(AuthComponent::user()); $contents1 = $this->request->data['Rssfeed']['contents']; $contents2 = $this->request->data; $statuses = $TwimStatus->tweet($contents1); if($this->Rssfeed->save($contents2)) { $this->Session->setFlash('成功です。'); $this->redirect(array('controller'=>'rssfeeds','action'=>'view',$contents11)); $this->redirect($this->referer()); }else{ $this->redirect(array('controller'=>'rssfeeds','action'=>'view',$contents11)); $this->Session->setFlash('失敗です。'); } } } ************************************************************************************** public function makelist() { $rssfeeds = $this->paginate(); if ($this->request->is('requested')) { return $rssfeeds; } else { $this->set('rssfeeds', $rssfeeds); } } } ---------------------------------------------------------------------------------------------------------------------- rssフィードはこんな感じです。 ---------------------------------------------------------------------------------------------------------------------- #!/usr/bin/php <?php header('Content-type: text/html; charset=UTF-8'); require_once ('/var/www/html/s/magpierss/rss_fetch.inc'); define('MAGPIE_CACHE_AGE', 60*5); define('MAGPIE_CACHE_DIR', '/var/www/html/s/cache/'); define('MAGPIE_OUTPUT_ENCODING','UTF-8'); $urls = array( '*********************************'); $items = getRssList($urls); echo '<ul>'; foreach ($items as $item) { $href = mb_convert_encoding($item['link'], "UTF-8", "auto"); $title = mb_convert_encoding($item['title'], "UTF-8", "auto"); $description = mb_convert_encoding($item['description'], "UTF-8", "auto"); $megami = mb_convert_encoding($description, "UTF-8", "auto"); ************************************************************************************** $all = 'http://urls.api.twitter.com/1/urls/count.json?url='.$href; $Rits = file_get_contents($all); $Olfe = mb_convert_encoding($Rits, 'UTF-8', 'auto'); $data = json_decode($Olfe); $tweets = $data->count; ************************************************************************************** $checkman = db_check_urls($href); $checkman2 = db_check_pr($title); $nowtimes = date('Ymd'); if($checkman == 0 &amp;&amp; $checkman2 == 0){ #$hrefs = urlencode($href); db_put_urls($nowtimes,$href,$title,$description,$tweets); echo "<li><a href=$href>$title</a><br>$megami<p>$tweets</p><p>$checkman</p></li>"; }else{ } } echo '</ul>'; ************************************************************************************** function getRssList($urls) { $rssitems = array(); foreach ($urls as $url) { $obj = fetch_rss($url); $rssitems = array_merge($rssitems, $obj->items); } return $rssitems; } ************************************************************************************** function db_check_pr($japanese){ $moji = mb_substr($japanese,0,2); if($moji == 'PR'){ return 1; }else{ return 0; } } ************************************************************************************** function db_check_urls($href){ require '/var/www/html/s/database_conf.php'; try { $db = new PDO($dsn, $dbUser, $dbPass); $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = 'SELECT count(*) AS count FROM rssfeeds WHERE urls = :language'; $prepare = $db->prepare($sql); $languages = array($href); foreach ($languages as $language) { $prepare->bindValue(':language', $language, PDO::PARAM_STR); $prepare->execute(); $result = $prepare->fetchColumn(); if ($result > 0) { return true; }else{ return false; } } } catch (PDOException $e) { echo 'エラーが発生しました。内容: ' . h($e->getMessage()); } function h($var) { return htmlspecialchars($var, ENT_QUOTES, 'UTF-8'); } } ************************************************************************************** function db_put_urls($nowtimes,$href,$title,$description,$tweets){ require '/var/www/html/s/database_conf.php'; try { $db = new PDO($dsn, $dbUser, $dbPass); $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sikibetu = 5; $moto = "アニゲー速報VIP"; $sql = 'insert into rssfeeds (id, time,urls,title,contents,tweets,times,kubetu,teikyo) values (?, ?, ?, ?, ?, ?, ?, ?, ?)'; $prepare = $db->prepare($sql); $prepare->bindValue(1, 0, PDO::PARAM_STR); $prepare->bindValue(2, $nowtimes, PDO::PARAM_STR); $prepare->bindValue(3, $href, PDO::PARAM_STR); $prepare->bindValue(4, $title, PDO::PARAM_STR); $prepare->bindValue(5, $description, PDO::PARAM_STR); $prepare->bindValue(6, $tweets, PDO::PARAM_STR); $prepare->bindValue(7, 'cast( now() as datetime)', PDO::PARAM_STR); $prepare->bindValue(8, $sikibetu, PDO::PARAM_STR); $prepare->bindValue(9, $moto, PDO::PARAM_STR); $prepare->execute(); } catch (PDOException $e) { echo 'エラーが発生しました。内容: ' . h($e->getMessage()); } } ?>
---------------------------------------------------------------------------------------------------------------------
**************************************************************************************
参考にした書籍
CakePHP2 実践入門 (WEB+DB PRESS plus)
CakePHP2 実践入門 (WEB+DB PRESS plus)
作者: 安藤祐介,岸田健一郎,新原雅司,市川快,渡辺一宏,鈴木則夫
発売日: 2012/09/29
購入: 5人 クリック: 165回
Webアプリ開発を加速する CakePHP2定番レシピ119
Webアプリ開発を加速する CakePHP2定番レシピ119
**************************************************************************************
一番難しいところはtwitterログインとwebサイト連結でした。
ツイート数でランキングしてます、ネットの話題を見つけられます。
ホームページビルダーを使用しています。
今のホームページビルダーは昔と違って高機能ですね。
テンプレートも何種類もあって今はすごいです。
に分かれています。
今更cakephpを使っている人は少ないかもしれませんが、
twitterアカウントあるといつでも参加できますので、