chmod -R 777 (指定ディレクトリ名)
777は、(オーナー)(グループ)(他ユーザー)の権限状態。
オーナー、グループ、他ユーザーそれぞれが下記の権限に基づきアクセスの制御を受ける。
Read(読み取り):4、Write(書き込み):2、eXcute(実行):1
700なら、オーバーのみフルアクセス。
-Rは、オプションで指定したディレクトリ配下に適用される。
2024年10月6日
奈良クラフトビール祭りに行ってきました。
会場は奈良公園の一角。
近鉄奈良駅から歩いて5分ほどで到着です。
さすが奈良公園、鹿の出迎えアリ。
まずは会場本部でシールを購入します。
シール10枚3000円。
ビール用のビニールカップ100円。
全ての出店ブースがこのシールと商品を交換するシステム。
インバウンド客も多かったですし、この方式は分かりやすくていいですね!
ということで
シール15枚とカップ1枚を入手。
早速、ブースをざっと眺め、最初の一杯はここに。
CHORYO Craft Beer
FRUITS SOUR -Tropical Mix-
シール2枚
さわやかな甘み感じるフルーツエール。
続いて、
奥大和ビール
スパイスダーク
シール2枚
ほろにがさにスパイスのアクセントが効いたスタウト。
奈良のソールフート、ホルモンの天ぷらをおつまみに。
シール4枚
お腹を満たしたところで3杯目。
曽爾高原ビール
ならのあわ梨
シール2枚
梨好きということでチョイス。
口当たり軽やかで飲みやすい。
おつまみを追加。
おでん(2種)、いか焼き、えだまめ
各シール1枚
ちょっと小ぶりですね(^^;
そして、
ゴールデンラビットビール
生ホップヘイジーIPA
シール2枚
爽やかさと苦み。
正統派を感じる一杯。
と、ここでシールを使い切り、軽く酔いがまわったところで終了。
今回訪れられなかったブース、飲めなかったビール、まだまだあるので心残りですが。。。
改めて、奈良クラフトビール祭り、最高でした。
第5回奈良クラフトビール祭り
開催日時:2024年10月5日(土)~10月6日(日)
10:00~17:00
会場:奈良公園登大路園地
住所:奈良県奈良市登大路町
2024年9月21日
三重県伊賀市の伊賀焼。
その伊賀焼のまつりが開催されるということで伊賀焼陶器まつりに行ってみました。
どんな陶器なのか楽しみに車を走らせること約2時間。
中勢バイパスができて伊賀市にも行きやすくなりましたね。
会場は運動場の一角にある屋根付きの大広場。
阿山第一運動公園 すぱーく阿山
駐車場はグラウンドを丸々使っているので広かったです。(200台駐車可能)
早速、なかに入ってみると
31の窯元・作家がズラリ。
熱気を感じます。
マグカップ、ぐい呑み、お皿、箸置き、土鍋などの定番からトレンドの陶板まで多種多様。
価格設定も1500円~3000円のものが多くお手頃感がありました。
伊賀焼の予備知識がなかったのですが、
ゴツッとした質感のこれぞ陶器といったものや色合い深い、味のある一品。
はたまたサラッとしたモダンなものまで幅の広さを感じるラインナップでした。
その中でお気に入りの窯元を見つけるのも楽しかったりしますね!
日々窯のブース。
お香立てに良さげだったので
亀の焼き物を購入。
税込み、3000円。
会場の外にはフードトラックが多数出店していました。
かき氷、税込み300円。
手作りシロップが絶品でした。
伊賀焼振興協同組合のサイトで「伊賀焼の魅力」を事前に見ておけばもっと楽しめたかも・・・。
陶器まつりを一通り見終わったので会場の向かいにある道の駅あやまに立ち寄りました。
道の駅からみた陶器まつりの会場。
道の駅に隣接する売店が充実していました。
売店の1つ、阿山農産。
伊賀盛(みそしる付き)を注文。
税込み1180円。
伊賀牛×伊賀米のコラボを堪能。
しおむすび、税込み120円も美味。
阿山農産の隣のご縁屋。
みたらしソフト。
税込み600円。
あまじょっぱい、ループしてしまうアレ。
伊賀焼の窯元が一堂に会する伊賀焼陶器まつり。
バラエティに富んだ陶器の数々を楽しむことができました。
そして、その向かいの道の駅あやまの売店がこれまた良き。
また訪れたいと思います。
第42回伊賀焼陶器まつり
開催日時:2024年9月21日(土)~9月23日(月)
9:00~17:00(最終日16:00)
会場:阿山第一運動公園「すぱーく阿山」
住所:三重県伊賀市川合3373−1
2024年8月21日
リモートワーカーの昼ご飯日記
伊勢の飲食店を巡ります。
かつて伊勢の台所と呼ばれた伊勢河崎。
その一角にあるのが河崎2丁目食堂です。
店の裏手に駐車場があります。
店内は4人掛けテーブル3卓、2人掛けテーブル1卓、カウンターの構成。
13時頃に訪れたときにはお客さんは1組だけでした。
カウンターに着席。
ランチメニューは定食vsカレーの構図。
洋食を堪能するか、スパイスにときめくか。。。悩みます。
A5黒毛和牛ビーフカレー&2種コロッケをチョイス。
税込み、1700円。
コロッケも美味しいのではずせません!
食後のメロンクリームソーダ。
ごちそうさまでした。
河崎2丁目食堂
営業時間:11時30分~14時、17時30分~21時
定休日:木曜日
住所:三重県伊勢市河崎2丁目7−14
2024年7月27日
地域当番が広報冊子や地域情報(回覧板)を地域住民に配る。
今でも当たり前に行っている習慣ですが、
現在の通信技術や環境を考えると無駄な作業に感じてしまいます。
そろそろブラッシュアップのタイミングではないでしょうか?
紙を物理的に配布するコストの削減を目指します。
・広報冊子
・地域情報
・市からの通達
・紙の削減(エコ、SDGs貢献)
・配送削減(ガソリン(CO2)、マンパワーの削減、SDGs貢献)
・全ての人に行きわたらない(スマートフォンが必要)
・既存企業の経済の喪失
・全てに人に行きわたらない
解決策)
スマートフォン貸与。
最安だと個人契約でも1台月額500円、デバイス1台0円~3000円。
大型契約だともっとディスカウントできるのではないか。
印刷代、配送代とのトレードオフ。
・既存企業の経済の喪失
解決策)
既存企業と提携して経済活動の代替を目指す(印刷 → ネットワーク管理)
・システム構築
Webシステム、アプリの作成(dat&開発)
・展開
モデルエリア(理解の高いエリアと低いエリアの2地域)を設定して試験。
フィールバックして市全エリアに展開。
・更なる電子化、市サービスとの連携
・他地域への横展開
・売り込み(管理費を収益源とする)
2024年7月15日
開発環境
OS:Windows 11
SDK:VS Code + Flutter 3.7.12
アプリ内のローカルストレージに格納したhtmlファイルを画面に表示します。
HTMLファイルはWebViewウィジェットを通して表示します。
そのため、WebViewパッケージをインストールする必要があります。
サンプルプロジェクトを生成して動作確認してみます。
flutter create sample
webview_flutterをインストールします。
flutter pub add webview_flutter
次にHTMLファイルを準備します。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>Top Page</title>
</head>
<script>
function sendData1() {
// Flutterへデータ送信
sample.postMessage("1");
}
function sendData2() {
// Flutterへデータ送信
sample.postMessage("2");
}
</script>
<body>
<h1>Please tap a button.</h1>
<br>
<br>
<button onclick="sendData1()">Send Data 1</button>
<br>
<br>
<button onclick="sendData2()">Send Data 2</button>
</body>
</html>
ボタンが2つあるHTMLファイル(top.html)を作成しました。
プロジェクトフォルダ内に「html」フォルダを作成し、その中に作成したhtmlファイルを格納します。
次にpubspec.yamlのassets項目にhtmlファイルを定義します。
assets:
- html/top.html
main.dartにWebViewウィジェットを追加します。
ネットワーク上のurlにアクセスして表示するわけではないため、htmlのロード処理もあわせて追加する必要があります。
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:webview_flutter/webview_flutter.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key, required this.title});
final String title;
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
late WebViewController controller;
late Future<void> controllerInitialization;
@override
void initState() {
super.initState();
controllerInitialization = initController();
}
Future<void> initController() async {
final html = await rootBundle.loadString('html/top.html');
controller = WebViewController()
..setJavaScriptMode(JavaScriptMode.unrestricted)
..addJavaScriptChannel('sample', onMessageReceived: (result) async {
switch (result.message) {
case "1":
print("call 1.");
break;
case "2":
print("call 2.");
break;
}
})
..loadRequest(
Uri.dataFromString(
html,
mimeType: "text/html",
encoding: Encoding.getByName("utf-8"),
),
);
}
@override
Widget build(BuildContext context) {
return FutureBuilder<void>(
future: controllerInitialization,
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
return Scaffold(
appBar: AppBar(title: const Text("Test Page")),
body: WebViewWidget(controller: controller),
);
} else {
return const CircularProgressIndicator();
}
},
);
}
}
※Android向けのビルドが失敗した場合はこちら↓をチェックしてみてください。
デバッグモードで起動しました。
HTMLのテキストと2つのボタンは期待通りに表示されています。
次にボタンを押し分けてみると・・・
ターミナルに「call 1.」、「call 2.」が表示されました。
ボタン操作も処理できることが確認できました。
今回は以上です。
2024年7月15日
開発環境
OS:Windows 11
SDK:VS Code + Flutter 3.7.12
久しぶりにFlutterの動作確認をしようとサンプルプロジェクトを生成し、Android向けにビルドしたら失敗しました。
Android向けビルド時に発生したビルドエラーの解消方法についての話。
サンプルプロジェクトを生成。
flutter create sample
AndroidスマホをPCにUSB接続し、デバイスをチェック。
flutter devices
スマホのデバイスIDを取得し、デバイスIDを指定してデバッグ起動。
flutter run -d (デバイスID)
たったこれだけの手順でビルドエラーが発生してしまいました。
以前はビルドできたはずなんですが。。。
Exception: Gradle task assembleDebug failed with exit code1
エラー内容は、以下。
ERROR: JAVA_HOME is set to an invalid directory: C:\Program Files\Android\Android Studio\jre
環境変数「JAVA_HOME」に指定したディレクトリが存在しないってことのようです。
ということでディレクトリを見てみると・・・
ディレクトリ「jre」の直下はディレクトリ「bin」のみ。
そのディレクトリ「bin」の直下も.makerファイルのみと見事にもぬけの殻になっていました。
そういえば、最近、Android StudioのバージョンをFlamingoからIguanaにバージョンアップしたんだったっけ。。。
ということでAndroid Studioの実体を探してみると・・・
ディレクトリ「jbr」にいることを確認。
環境変数を編集します。
ターミナルを立ち上げなおして再度、ビルドしてみます。
flutter run -d (デバイスID)
ビルドが成功し、スマホ上でサンプルアプリが起動しました。
今回は以上です。
2024年7月15日
開発環境
OS:Windows 11
SDK:Android Studio Iguana | 2023.2.1 Patch 1
Google Play Consoleの受信トレイにcom.google.android.playに関する警告がきており、8月31日までに対処が必要とのことで対応しました。
Google Play Consoleの受信トレイにcom.google.android.playに関する警告が届きました。
警告の内容を確認すると、
com.google.android.play.core(1.8.0)がAndroid 14(sdk 34)に対応できなくてアプリがクラッシュするため、それを回避するために8月31日までにライブラリの参照を変更しなさい。
とのことのようです。
com.google.android.play.coreって何に使ってたんだろうか?
まずは警告が届いたアプリのソースコードを確認します。
Android Studioで立ち上げ、「com.google.android.play」で検索してみると・・・
検索の結果、In-App Reviewのモジュールがヒットしました。
import com.google.android.play.core.review.ReviewManagerFactory
import com.google.android.play.core.review.ReviewManager
build.gradleのライブラリを確認すると
今回の警告対象である「com.google.android.play:core-kt」が見つかりました。
dependencies {
implementation("com.google.android.play:core-ktx:1.8.1")
}
バージョンアップ対象のマーカーがつかないので一見すると分かりません。。。
「com.google.android.play:core-kt」を削除してビルドしなおしてみるとReviewManagerのインポートで参照エラーがでました。
「com.google.android.play:core-kt」の代替ライブラリが必要のようです。
改めてIn-App Reviewの実装方法を公式サイトで確認するとライブラリが変わっていました。
dependencies {
implementation 'com.google.android.play:review-ktx:2.0.1'
}
ということで「com.google.android.play:core-ktx」を「com.google.android.play:review-ktx」に変更し、ビルドしてみると・・・
ビルドが成功しました。
これで警告の対応が完了です。
お疲れさまでした。
2024年7月15日
開発環境
OS:Windows 11
SDK:Android Studio Iguana | 2023.2.1 Patch 1
AndroidアプリにIn-App Reviewを組み込みます。
In-App Reviewとはアプリの評価やレビューの入力を促すポップアップ機能です。
アプリの操作中に意図したタイミングでポップアップさせることができます。
アプリの評価やレビューはアプリの改善に役に立つため、In-App Reviewの実装はおススメです。
実装していきます。
まずはbuild.gradleにライブラリを組み込みます。
dependencies {
implementation 'com.google.android.play:review-ktx:2.0.1'
}
次に必要なモジュールをインポートします。
import com.google.android.play.core.review.ReviewManagerFactory
import com.google.android.play.core.review.ReviewManager
Activityの起動時にレビューマネージャーを生成します。
private lateinit var reviewmanager : ReviewManager
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
reviewmanager = ReviewManagerFactory.create(this)
}
あとは適当な場所(画面起動時やイベント終了後など)でポップアップ処理をコールします。
val request = reviewmanager.requestReviewFlow()
request.addOnCompleteListener { task ->
if (task.isSuccessful) {
val reviewInfo = task.result
val flow = reviewmanager.launchReviewFlow(this@MapsActivity, reviewInfo)
flow.addOnCompleteListener { _ ->
}
}
}
In-App Reivewの実装は以上です。
デバッグをしたい場合、FakeReviewManagerを使用します。
FakeReviewManagerをインポートします。
import com.google.android.play.core.review.ReviewManagerFactory
import com.google.android.play.core.review.ReviewManager
import com.google.android.play.core.review.testing.FakeReviewManager
FakeReviewManagerを生成します。
private lateinit var reviewmanager : ReviewManager
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// reviewmanager = ReviewManagerFactory.create(this)
reviewmanager = FakeReviewManager(this)
}
ポップアップ処理は変更不要です。
FakeReviewManagerのデバッグではポップアップは表示されず、正常系のシーケンスのみ確認できます。
ステップ実行してみるとrequestReviewFlowに成功し、launchReviewFlowがコンプリートします。
これでIn-App Reviewの組み込みは終了です。
お疲れさまでした。
2024年6月1日
この世に天国なんてあるのか?
日本酒が堪能できる施設があるよ、という情報をキャッチしたので近鉄電車で京都伏見まで。
桃山御陵前駅で降り、徒歩10分程。
伏見大手筋商店街を通り抜けた先にあるのが黄桜カッパカントリーです。
お昼ご飯と一緒に日本酒を嗜もうと
12時30分頃に到着。
地ビールとお酒の天国。
入り口だけで期待感高し。
入り口左手が黄桜記念館。
黄桜のトレードマークでもある河童を中心とした企業展示を見ることができます。
そして、右手から施設に入ると売店とレストラン。
早速、レストランのレジカウンターに。
幸い、待つことなく席を案内してもらうことができました。
案内してもらったのは
掘りごたつの席。
レストランは広々としており、
リラックスした雰囲気が漂います。
これぞ、黄桜。
さあ、何を頼もうか。
1品料理から定食までメニューも豊富なので悩みます。
そして、選んだのがこちら。
出し巻き和定食。
税込み、1050円
濃厚な酒粕汁に焼き鮭。
この組み合わせは無限にいけてしまいます。
そして、日本酒は。
黄桜9種飲み比べ。
税込み、1950円。
どぶろくから大吟醸まで多彩なセット。
あとは1品料理を適当に頼みつつ日本酒を堪能♪
豊富な食事メニュー。
そして、地ビール、日本酒。
写真が一部、ブレてしまってます。
酔っていたわけではないのですが。
家が近ければ、仕事終わりに来たかった。。。
これは何度来ても楽しめる究極のエンターテイメント。
天国、ここにありました。
黄桜カッパカントリー
営業時間:11:00(平日11:30)~14:00、17:00~20:50
定休日:火曜日
住所:京都府京都市伏見区塩屋町228