가능한 말단에 있는 사람들까지 의사결정에 참여하게 하면 더 나은 결과를 얻을 수 있다. 뿐만 아니라 구성원 개개인의 발전 속도도 더 빨라지고 맡은 일에 열의를 갖고 더 효율적으로 움직인다. - MIT 더글러스 맥그리거 교수
주인의식이 생기면 기적이 일어납니다. 상식적으로 의사결정을 할 수 없는 주인은 없습니다. 그러나 의사결정 권한도 주지 않고 주인의식이 없다고 탓하는 경영자들이 많습니다. 의사결정에 참여함으로써 직원들의 주인의식은 커집니다. 머리를 맞대고 결정을 함께 내려 목표를 공유한 직원들은 자신의 일을 소중히 여길 뿐 아니라 회사의 미래도 중시하게 됩니다.
혼자 책 읽는 것이 버겁거나 힘들다면, 이렇게 타인들과 같이 독서하는 것도 좋습니다. 혹여나 글자의 크기나 양으로 인해 부담이 된다면, 그래서 책을 읽는 것이 어렵다면, 그림책을 권해 드립니다. 짧은 시도 좋고요. 영국의 그림책 작가 앤서니 브라운이 말했지요. "그림책을 어린아이들이나 보는 책이라고 생각하지 마라." 라고요. 그만큼 철학적인 책이고 생각할 거리가 많은 것이 그림책입니다.
- 이재연, 오수아의 《심리여행 IN 독서치료》 중에서 -
* 예전 일간지 한 켠에는 네 칸짜리 시사만화가 있었습니다. 몇 컷 안되는 짧은 그림 속에 그날의 세계가 응축돼 촌철살인으로 들어있었습니다. 아주 명쾌하고, 신랄하고, 쉽고, 간략하게... 그것만으로도 충분했습니다. 그림책으로 세상을 읽는 것도 큰 지적 자산입니다. 머릿속에 선명한 그림을 그려낼 수 있고, 무궁한 상상력과 사고력을 높일 수 있습니다.
2005년에 TBS에서 방영된 드라마. 라쿠고가가 되려는 야쿠자 토라지를 중심으로 벌어지는 사건들을 그려낸 코미디 드라마이다.
먼저 2005년 1월 9일에 2시간짜리 스페셜 드라마가 방영된 후, 속편의 형태로 연속 드라마화되어 2005년 4월 15일부터 6월 24일까지 금요 드라마로 방영되었다.
2023년 7월부터 넷플릭스에서 볼 수 있다.
매화 고전 라쿠고 한 편을 현대식으로 어레인지하여 에피소드가 진행된다. 이는 코토라가 고전을 하고 싶어하지만 고전을 피로할 만한 연기력과 배경지식의 부족은 물론 센스도 처참함을 알아본 스승 돈베이의 고육지책이기도 하다. 상상력은 부족하지만 이야기에 힘과 설득력은 있었기에 코토라가 최근에 겪었던 사건에 고전의 주제의식을 덧씌워서 이야기하는 식이다. 따라서 원작이 되는 고전을 모르면 이해가 안 되는 구조지만 친절하게도 작중에서 어떤 형태로든 원작을 미리 알려주기 때문에 걱정할 필요가 없다.
라쿠고를 소재로 했지만 라쿠고를 전혀 몰라도 감상에 아무 지장이 없는 작품이며 동시에 준수한 완성도와 작품성에 시청률도 좋았기 때문에 라쿠고에 대한 거부감과 진입장벽을 낮춰주어 대중적으로, 특히 젊은 층에게 라쿠고를 널리 알리고 새로이 입문하게 된 계기가 되었다. 2023년 현재까지도 본작보다 영향력있게 라쿠고를 알린 작품은 없다고 봐도 무방하다.
실제로 본 작이 방영된 2005년 라쿠고 붐이 일어났다. 2003년에 주게무 유행과 2004년에도 미디어에서 라쿠고를 다루는 빈도가 늘어났는데 이 드라마가 결정타가 되어 이후 5년 정도 라쿠고의 인기가 크게 늘었다.
Deeplink in Flutter means the ability to open a specific page or perform a specific action within your app by clicking on a link from another app or a web page. It allows users to navigate to specific pages or sections of your app like cart, orders, or any product information, etc. Deeplink in Flutter is a very good feature for all developers and users. Flutter supports deep linking on iOS, Android, and web browsers. Implementing deep linking in Flutter apps enhances the user experience and makes it easier for users to navigate directly to specific sections.
Introduction
Deep linking is a crucial feature in mobile app development that enables smooth navigation to specific sections of different apps. This is very useful for users to access relevant content or perform specific tasks without manually navigating through the app’s screens. This deep linking feature eliminates the need for users to search for or manually locate the desired information within the app. Deep linking is a useful functionality for apps like e-commerce apps, content-driven apps, and social media platforms. By using deep links in Flutter, we can connect with other apps and services making it a good digital ecosystem.
Understanding Deep Links in Flutter
DeepLinks in Flutter means you have URLs or URIs to navigate or perform specific actions within a Flutter app. It directly helps users to access specific screens or content like webpages, screens, and notifications.
There are some concepts and terms that should be known to developers for using deep links in the Flutter applications.
URL Scheme-
A URL scheme is a unique identifier that identifies your app and allows it to handle specific deep links. It is generally a link to view or see a particular product in an e-commerce app.
Universal Links (iOS) and App Links (Android):
These are platform-specific mechanisms that help deep linking to work smoothly between web content and apps. These help in directly opening the content of the app, if the app is installed on the device, or fall back to the web page if the app is not present.
Deep Link Handling:
We need to handle the logic for deep lonks in Flutter like capturing the link URL and getting important data such as parameters or query strings. This captured information helps in navigating to a particular screen or performing the actions.
Implement Deep Linking on Android
To use deep links in your Flutter applications, we must have links for redirection that can be instantiated by adding intent filters for the incoming links.
In Android, we have two types of Uni Links, which are approximately the same as the meaning.
Open the DynamicLink section in firebase
On a domain that you may customize by adding your own name, company name, trademark, etc., dynamic links are generated. More relevant links that have been customized appear. After displaying this window, click Finish.
Now, on the newly opened page, select the “New Dynamic link” button.
Click on the new dynamic link button.
App Links-
App Links are the same as deep links, but it does require a specified host, i.e. a hosted file and along with this, the app links only tend to work with the HTTPS scheme.
You need to add the following code to your AndroidManifest file for adding deep links in Flutter. There you have to define an intent-filter and you can change the host with your need.
<!-- This is for App Links -->
<meta-data
android:name="flutter_deeplinking_enabled"
android:value="true" />
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- Accepts URIs that begin with https://YOUR_HOST -->
<data
android:scheme="http"
android:host="deeplink.example.com" />
<data android:scheme="https" />
</intent-filter>
Deep Links-
Deep links are the links in Android, which don’t require a specified host or any other custom scheme.
As discussed above, we have to paste for Deep links and we can change the host and scheme accordingly.
<!-- This is for Deep Links -->
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- Accepts URIs that begin with YOUR_SCHEME://YOUR_HOST -->
<data android:scheme="blog" android:host="deeplink.example" />
</intent-filter>
We can use any of the intent filters in the AndroidManifest.xml file.
Theintent filteris a statement in the manifest file that specifies what intent or component will be received on the app side, according to native app implementation. When an action occurs, it can specify additional actions that should be taken on this intent filter.
Datais what the URI format, which primarily resolves to the activity, represents. Also, a data tag must have theandroidattribute.
Acategoryis mainly the type of intent-filter category. We have definedBROWSABLEin the category, which means that the intent filter can be accessed from the browser, and if not added, it will not be browsed.
Implement Deep Linking on iOS
In iOS also, we have two types of links-
Universal Links:
Universal links are those links that require a specified host or a custom scheme in their app. It works only with the HTTPS scheme. Below is the defined example of a universal link.
For setting up Universal Links we need to follow some steps-
Enable Associated Domains in your app’s entitlements.
Set up a unique URL identifier for your app.
Set up a JSON file on your website that contains information about your app’s URL identifier.
Enable Associated Domains
Creating the entitlements file in Xcode:
Open up Xcode by double-clicking on your ios/Runner.xcworkspace file.
Go to the Project navigator (Cmd+1) and select the Runner root item at the very top.
Select the Runner target and then the Signing & Capabilities tab.
Click the + Capability (plus) button to add a new capability.
Type “associated domains” and select the item.
Double-click the first item in the Domains list and change it from webcredentials.com to: applinks: + your host (ex: my-blogs.com). A file called Runner.entitlements will be created and added to the project.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<!-- ... other keys -->
<key>com.apple.developer.associated-domains</key>
<array>
<string>applinks:[YOUR_HOST_HERE]</string>
</array>
<!-- ... other keys -->
</dict>
</plist>
Custom URL:
In Custom URL, we don’t need a host or a custom scheme for our iOS app. An example of a custom URL is defined below. We need to add the host and scheme in the ios/Runner/Info.plist file.
There are two ways your app will receive a link — from a cold start and brought from the background.
ATTENTION-
getInitialLink/getInitialUri should be handled ONLY ONCE in your app’s lifetime, since it is not meant to change throughout your app’s life
Once we are done with the Universal Links set up for our app, we will need to handle the links within our Flutter app. To do this, we need to use theuni_linkspackage. Add this dependency in pubspec.yaml file and pub get it.
uni_links: ^0.5.1
Now, we just need to register a callback to handle incoming deep links.
import 'package:uni_links/uni_links.dart';
void main() {
// Initialize the deep link handler
initUniLinks();
runApp(MyApp());
}
void initUniLinks() async {
// Ensure that the app is ready to handle deep links
await getInitialUri();
// Set up a stream subscription to handle deep links when the app is running
uriSubscription = uriLinkStream.listen((Uri uri) {
// Handle the deep link here
handleDeepLink(uri);
});
}
void handleDeepLink(Uri uri) {
// Process the deep link URI and navigate accordingly
// You can extract parameters or perform specific actions based on the deep link data
}
Advanced Usage
Some additional features enhance the capabilities of deep linking in our Flutter app. These features help in creating more personalized and smooth user experiences, tracking user engagement, optimizing marketing efforts, and improving overall app performance.
Deep Link Analytics-
By implementing Deep Link Analytics, we can track and analyze user engagement with deep links. We can get the data on the number of clicks, conversions, and user behavior after accessing the app through a deep link. With this information, we can get to know about our deep links and can do some optimization if needed.
Deferred Deep Linking-
This helps in handling the scenarios, where the app is not installed on the user’s device on clicking the deep link. In these cases, the user is redirected to the app store to download the app and after installation, the app can open and handle the deep link that triggered the installation.
Dynamic Deep Links-
These help in generating deep links programmatically with dynamic parameters. It means we can generate deep links that include user-specific data, product IDs, or other variables.
Deep Link Attribution-
By using this you can track the source of each deep link and can know which channels are getting more engagement and conversions.
Deferred App Deep Linking-
Some platforms handle deep links when the app is already installed but not in the foreground. But this feature works even if the app is in the background or not currently running.
Example App
Let us understand this through a code. In the AndroidManifest.xml file, I have declared my link like — blog://deeplink.example
We will declare the function main.dart file like this.
We will open this app through the deeplink shown below. We will paste the same link(blog://deeplink.example) in the browser and it will show us the APP NAME of that app and will navigate us to the app by clicking on continue
Conclusion
Deep links help in seamless navigation to specific screens from external sources like the web, notifications, etc.
By using deep links, users are more engaged and satisfied. This also helps users to users to access relevant and personalized content.
Deep links provide cross-platform compatibility like for both iOS and Android.
Deep links can be customized with parameters or query strings, allowing for dynamic and personalized experiences based on user-specific data.
We can test and analyze deep links, also we can track user behavior, and optimize our app’s deep linking strategy.
By using deep links in Flutter, we can interact with other apps, services, or platforms. Also, we can collaborate and share the data.
당신의 행동이 사람들로 하여금 더 많은 꿈을 꾸게 하고, 더 많이 배우게 하고, 더 많이 실행하게하고, 더 좋은 사람이 되도록 고취시켜준다면 당신은 리더이다. - 존 퀸시 애덤스(John Quincy Adams)
비전을 갖게 하고, 더 배울 동기를 부여하고, 더 나은 성과를 내게 하고, 더 좋은 사람이 될 수 있도록 돕는 것이 리더의 역할입니다. 당근과 채찍을 사용하거나, 말로써 가르치는 것은 한계가 있습니다. 몸으로 보여주는 것, 내가 먼저 솔선수범하는 것이 최고의 리딩 방법입니다. 사람들은 리더의 말 보다는 행동을 보고, 리더의 헌신을 보고 따라합니다.